Форум РадиоКот • Просмотр темы - Датчик tcs320 и atmega328p
Сообщения без ответов | Активные темы
Страница 1 из 1
[ Сообщений: 20 ]
Автор
Сообщение
Михаил_avr
Заголовок сообщения: Датчик tcs320 и atmega328p
Добавлено: Вс фев 21, 2021 17:32:27
Зарегистрирован: Вс фев 21, 2021 13:01:40Сообщений: 80Откуда: Прокопьевск
Рейтинг сообщения: 0
Здравствуйте, я хотел подключить датчик цвета tcs320 к микроконтроллеру atmega328p, написал код, но он не работает, подскажите где ошибка. #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #define F_CPU 8000000 //---------- #define S0 6 #define S1 3 #define S2 6 #define S3 4 #define sensorOut 2 //---------- volatile unsigned char status; volatile int tim = 0; //---------- void red_value(void) { DDRD &= ~(1 << S2); DDRD &= ~(1 << S3); } //---------- void green_value(void) { DDRD &= ~(1 << S2); DDRD &= ~(1 << S3); } //---------- void blue_value(void) { DDRD &= ~(1 << S2); DDRD |= (1 << S3); } //---------- void data_ini(void) { DDRD = B11110111; //DDRD |= (1 << S2); // DDRD |= (1 << S3); } //---------- void int_ini(void) { //включим прерывания INT0 по нисходящему фронту EICRA |= (1 << ISC00); //разрешим внешнее прерывание INT0 и INT1 EIMSK |= (1 << INT0); } //---------- void TIMER_INI(void) { TCCR1A = 0x00; //обычный режим работы таймера TCCR1B = B00000010; //предделитель на 1024 TIMSK1 = 0x00; //прерывание по переполнению нет } //---------- int main(void) { Serial.begin(9600); data_ini(); int_ini(); TIMER_INI(); while (1) { red_value(); while ( status != 2 ); Serial.println(TCNT1); } } //---------- ISR(INT0_vect) { //проверяем уровень синала PD2( ECHO ) if (digitalRead(2)==1) { TCNT1 = 0; status = 1; } else { //задний фронт - запоминаем значение таймера tim = TCNT1; status = 2; } }
Вернуться наверх
Реклама
Михаил_avr
Заголовок сообщения: Re: Датчик tcs320 и atmega328p
Добавлено: Вт фев 23, 2021 12:04:02
Зарегистрирован: Вс фев 21, 2021 13:01:40Сообщений: 80Откуда: Прокопьевск
Рейтинг сообщения: 0
Одну ошибку нашёл в data-ini не тот бин на входДобавлено after 3 minutes 19 seconds: Тут как с дальномером Hs-spor4Добавлено after 28 seconds: Тут как с дальномером Hs-spor4
Вернуться наверх
Реклама
Михаил_avr
Заголовок сообщения: Re: Датчик tcs320 и atmega328p
Добавлено: Вс мар 07, 2021 07:38:14
Зарегистрирован: Вс фев 21, 2021 13:01:40Сообщений: 80Откуда: Прокопьевск
Рейтинг сообщения: 0
Вернуться наверх
Реклама
Demiurg
Заголовок сообщения: Re: Датчик tcs320 и atmega328p
Добавлено: Вс мар 07, 2021 19:55:52
Это не хвост, это антенна
Карма: 4
Рейтинг сообщений: 141
Зарегистрирован: Ср июн 25, 2008 15:19:44Сообщений: 1385
Рейтинг сообщения: 0
Подсказка. Разберитесь для начала, что такое DDRx PORTx. Также, как правильно выставлять управлять отдельными битами портов.
Вернуться наверх
Реклама
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Подробнее>>
Михаил_avr
Заголовок сообщения: Re: Датчик tcs320 и atmega328p
Добавлено: Пн мар 08, 2021 07:48:46
Зарегистрирован: Вс фев 21, 2021 13:01:40Сообщений: 80Откуда: Прокопьевск
Рейтинг сообщения: 0
Здравствуйте, я прочитал про DDRX И PORTX. (Читал на сайте narodstream). Этот код я переделал чуть под hs-sr04, с ним работает а с ts-320 нет хотя функция счета длительности импульса одинаковая.
#include <avr/interrupt.h>
#include <avr/io.h>
#define F_CPU 16000000UL //16MHz
#include <util/delay.h>
int trigPin = 3; // назначаем имя для Pin8
int echoPin = 2; // назначаем имя для Pin9
volatile unsigned char status;
volatile int tim = 0;
ISR(INT0_vect)
{
//проверяем уровень синала PD2( ECHO )
if (PIND & (1 << 2)
)
{
TCNT1 = 0;
status = 1;
}
else
{
//задний фронт - запоминаем значение таймера
tim = TCNT1;
status = 2;
}
}
void int_ini(void)
{
//включим прерывания INT0 по нисходящему фронту
EICRA |= (1 << ISC00);
//разрешим внешнее прерывание INT0 и INT1
EIMSK |= (1 << INT0);
}
//----------
void TIMER_INI(void)
{
TCCR1A = 0x00; //обычный режим работы таймера
TCCR1B = B00000010; //предделитель
TIMSK1 = 0x00; //прерывание по переполнению нет
}
void USORT_Init(unsigned int ubrr) {
UBRR0H = (unsigned char)(ubrr >>
;
UBRR0L = (unsigned char)ubrr;
/*Enable receiver and transmitter */
UCSR0B = (1 << RXEN0) | (1 << TXEN0);
UCSR0C = 0x06; /* Set frame format: 8data, 2stop*/
UCSR0C = (1 << USBS0) | (3 << UCSZ00);
}
void UARTSend(uint8_t data) {
while (!(UCSR0A & (1 << UDRE0)));
UDR0 = data;
}
void chislo_printin (unsigned char seg)
{
switch (seg)
{
case 1: UARTSend('1'); break;
case 2: UARTSend('2'); break;
case 3: UARTSend('3'); break;
case 4: UARTSend('4'); break;
case 5: UARTSend('5'); break;
case 6: UARTSend('6'); break;
case 7: UARTSend('7'); break;
case 8: UARTSend('8'); break;
case 9: UARTSend('9'); break;
case 0: UARTSend('0'); break;
}
}
//}
void chislo_print(unsigned int number)
{
unsigned int r1 = number % 10;
unsigned int r3 = number / 100;
unsigned int r2 = (number - r3 * 100) / 10;
chislo_printin(r3);
chislo_printin(r2);
chislo_printin(r1);
}
void data_ini(void)
{
DDRD |= (1 << 3); // назначаем trig, как выход
DDRD &= ~(1 << 2); // назначаем echo, как вход
}
void hs_sro4_ini(void)
{
PORTD &= ~(1 << 3);;
_delay_us(2);
PORTD |= (1 << 3);
_delay_us(10);
PORTD &= ~(1 << 3);
}
int main(void)
{
data_ini();
USORT_Init(103);// подключаем монитор порта//speed 9600
TIMER_INI();
int_ini();
sei();
while (1)
{
hs_sro4_ini();
int cm; // назначаем переменную "cm" для показаний датчика
status = 0;
while ( status != 2 );
cm = tim / 58 / 2; // вычисляем расстояние в сантиметрах
chislo_print(cm); // выводим расстояние в сантиметрах
UARTSend('c');
UARTSend('m');
UARTSend(0x0d);
UARTSend(0x0a);
_delay_ms(1000); // ставим паузу в 1 секунду
}
}
Вернуться наверх
Реклама
Реклама
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Подробнее>>
Jack_A
Заголовок сообщения: Re: Датчик tcs320 и atmega328p
Добавлено: Пн мар 08, 2021 11:10:45
Друг Кота
Карма: 62
Рейтинг сообщений: 840
Зарегистрирован: Вт апр 24, 2007 07:45:40Сообщений: 5598Откуда: Minsk
Рейтинг сообщения: 0
Я на Сишках для АВР никогда не писа'л, но разве нельзя написать просто
Код:
UARTSend(seg + 0x30);
вместо этой функции
Код:
void chislo_printin (unsigned char seg) { switch (seg) { case 1: UARTSend('1'); break; case 2: UARTSend('2'); break; case 3: UARTSend('3'); break; case 4: UARTSend('4'); break; case 5: UARTSend('5'); break; case 6: UARTSend('6'); break; case 7: UARTSend('7'); break; case 8: UARTSend('8'); break; case 9: UARTSend('9'); break; case 0: UARTSend('0'); break; } }
_________________
Вернуться наверх
Реклама
Михаил_avr
Заголовок сообщения: Re: Датчик tcs320 и atmega328p
Добавлено: Пн мар 08, 2021 14:01:02
Зарегистрирован: Вс фев 21, 2021 13:01:40Сообщений: 80Откуда: Прокопьевск
Рейтинг сообщения: 0
Спасибо большое ваша функция работает также, но она быстрее, и памяти занимает она меньше.Добавлено after 32 minutes 12 seconds: А если вы на ассемблере писали не могли бы вы подсказать тут где ошибка RJMP RESET RESET: LDI R16,LOW(RAMEND) OUT SPL,R16 LDI R16,HIGH(RAMEND) OUT SPH,R16 ; .DEF TempL = r16 .DEF TempH = r17 start: RCALL INIT_USART LDI R16,'m' RCALL UARTSEND rjmp start INIT_USART: LDI TempL, LOW(103) STS UBRR0L,R16 LDI TempH,HIGH(103) STS UBRR0H, R17 LDI TEMPL ,(1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0) STS UCSR0B,TEMPL ;LDI TEMPL,0x06 ; STS UCSR0C , TEMPL LDI TEMPL,(1<<USBS0)|(3<<UCSZ00); STS UCSR0C , TEMPL RET UARTSEND: LDS R17,UCSR0A SBRS R17,UDRE0 RJMP UARTSEND STS UDR0,R16 RET
Вернуться наверх
Реклама
Jack_A
Заголовок сообщения: Re: Датчик tcs320 и atmega328p
Добавлено: Пн мар 08, 2021 22:34:40
Друг Кота
Карма: 62
Рейтинг сообщений: 840
Зарегистрирован: Вт апр 24, 2007 07:45:40Сообщений: 5598Откуда: Minsk
Рейтинг сообщения: 0
Нужно знать - в чём проявляется ошибка, что требуется - и что делает фактически.
Да, я все свои поделки кропал на асме, в прошлом тысячелетии
. Но если уточнишь (см. выше) - попробуем
помараковать. Непонятная прога. Зациклена, непрерывно передаёт в UART букву m. Значения битов упр. регистров не смотрел пока.
_________________
Вернуться наверх
Реклама
Михаил_avr
Заголовок сообщения: Re: Датчик tcs320 и atmega328p
Добавлено: Вт мар 09, 2021 02:58:02
Зарегистрирован: Вс фев 21, 2021 13:01:40Сообщений: 80Откуда: Прокопьевск
Рейтинг сообщения: 0
Должна выводить непрерывно букву m на скорости 9600,а выводит знак '?' Заранее спасибо.
Вернуться наверх
Реклама
Jack_A
Заголовок сообщения: Re: Датчик tcs320 и atmega328p
Добавлено: Вт мар 09, 2021 10:29:00
Друг Кота
Карма: 62
Рейтинг сообщений: 840
Зарегистрирован: Вт апр 24, 2007 07:45:40Сообщений: 5598Откуда: Minsk
Рейтинг сообщения: 0
Что является приёмником ввода? Совпадают ли настройки UART у приёмника и передатчика? Частота кварца? Если МК тактируется от внутреннего RC генератора - могут быть грабли. Если есть осцилл - посмотреть - что действительно выводится. Для этого хорошо бы поставить небольшую задержку в цикле вывода.
_________________
Вернуться наверх
Demiurg
Заголовок сообщения: Re: Датчик tcs320 и atmega328p
Добавлено: Вт мар 09, 2021 10:39:55
Это не хвост, это антенна
Карма: 4
Рейтинг сообщений: 141
Зарегистрирован: Ср июн 25, 2008 15:19:44Сообщений: 1385
Рейтинг сообщения: 0
Не понял, у вас в секции start зачем ret? Если она как отдельная функция, вопрос снят. Если нет, то вот одна ошибка уже есть. Вам нужно основной цикл закольцевать.
Вернуться наверх
Jack_A
Заголовок сообщения: Re: Датчик tcs320 и atmega328p
Добавлено: Вт мар 09, 2021 10:51:06
Друг Кота
Карма: 62
Рейтинг сообщений: 840
Зарегистрирован: Вт апр 24, 2007 07:45:40Сообщений: 5598Откуда: Minsk
Рейтинг сообщения: 0
Всё закольцовано. Но неправильно.
Вот так будет лучше:
Код:
start: RCALL INIT_USART loop: LDI R16,'m' RCALL UARTSEND rjmp loop ......................... INIT_USART:......
_________________
Вернуться наверх
akl
Заголовок сообщения: Re: Датчик tcs320 и atmega328p
Добавлено: Вт мар 09, 2021 11:58:31
Карма: 64
Рейтинг сообщений: 966
Зарегистрирован: Пт мар 07, 2008 06:54:43Сообщений: 4221Откуда: Ижевск
Рейтинг сообщения: 0
...на ассемблере ... где ошибка...
Не думаю, что вести инициализацию во время передачи, хорошая затея.
Код:
UARTSEND: ;LDS R17,UCSR0A ;SBRS R17,UDRE0 ;RJMP UARTSEND STS UDR0,R16 WAIT_0: LDS R17,UCSR0A SBRS R17,UDRE0 RJMP WAIT_0 RET
Вернуться наверх
Jack_A
Заголовок сообщения: Re: Датчик tcs320 и atmega328p
Добавлено: Вт мар 09, 2021 14:11:59
Друг Кота
Карма: 62
Рейтинг сообщений: 840
Зарегистрирован: Вт апр 24, 2007 07:45:40Сообщений: 5598Откуда: Minsk
Рейтинг сообщения: 0
По'стом выше это я уже отметил.
_________________
Вернуться наверх
Михаил_avr
Заголовок сообщения: Re: Датчик tcs320 и atmega328p
Добавлено: Вт мар 09, 2021 17:57:44
Зарегистрирован: Вс фев 21, 2021 13:01:40Сообщений: 80Откуда: Прокопьевск
Рейтинг сообщения: 0
Всем спасибо за помощь, вот исправленный и рабочий код
Код:
RJMP RESET RESET: LDI R16,LOW(RAMEND) OUT SPL,R16 LDI R16,HIGH(RAMEND) OUT SPH,R16 ; .DEF TempL = r16 .DEF TempH = r17 main: RCALL INIT_USART loop: LDI R16,'M' RCALL UARTSEND LDI R16,'i' RCALL UARTSEND LDI R16,'s' RCALL UARTSEND LDI R16,'h' RCALL UARTSEND LDI R16,'a' RCALL UARTSEND LDI R16,0x0d RCALL UARTSEND LDI R16,0x0a RCALL UARTSEND rjmp loop INIT_USART: LDI TempL, LOW(103) STS UBRR0L,R16 LDI TempH,HIGH(103) STS UBRR0H, R17 LDI TEMPL ,(1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0) STS UCSR0B,TEMPL LDI TEMPL,0x06 STS UCSR0C , TEMPL STS UCSR0C , TEMPL RET UARTSEND: LDS R17,UCSR0A SBRS R17,UDRE0 RJMP UARTSEND STS UDR0,R16 RET
Вернуться наверх
Jack_A
Заголовок сообщения: Re: Датчик tcs320 и atmega328p
Добавлено: Вт мар 09, 2021 21:24:57
Друг Кота
Карма: 62
Рейтинг сообщений: 840
Зарегистрирован: Вт апр 24, 2007 07:45:40Сообщений: 5598Откуда: Minsk
Рейтинг сообщения: 0
Вот так, пожалуй, будет лучше. Особенно если строка длинная.
Код:
tmp: ldi ZH,High(MyArray*2) ;загрузка адреса 0-го ldi ZL,Low(MyArray*2) ;элемента в рег. пару Z loop: lpm ;загрузка из ПЗУ tst R0 breq tmp adiw ZL,1 mov R16,R0 rcall UARTSEND rjmp loop ................................... MyArray: .db "Aby shto",0xD,0xA,0
.
_________________
Вернуться наверх
Михаил_avr
Заголовок сообщения: Re: Датчик tcs320 и atmega328p
Добавлено: Ср мар 10, 2021 06:46:45
Зарегистрирован: Вс фев 21, 2021 13:01:40Сообщений: 80Откуда: Прокопьевск
Рейтинг сообщения: 0
Да так и правда будет лучше. Спасибо. А вот работа предыдущей программы.
Добавлено after 1 hour 10 minutes 7 seconds: А ещё кто-нибудь знает как дизасемблирование делать в атмел студии 7?
Вернуться наверх
Demiurg
Заголовок сообщения: Re: Датчик tcs320 и atmega328p
Добавлено: Ср мар 10, 2021 07:43:43
Это не хвост, это антенна
Карма: 4
Рейтинг сообщений: 141
Зарегистрирован: Ср июн 25, 2008 15:19:44Сообщений: 1385
Рейтинг сообщения: 0
Вкладка View Disassembler
Вернуться наверх
Михаил_avr
Заголовок сообщения: Re: Датчик tcs320 и atmega328p
Добавлено: Ср мар 10, 2021 08:39:09
Зарегистрирован: Вс фев 21, 2021 13:01:40Сообщений: 80Откуда: Прокопьевск
Рейтинг сообщения: 0
Вернуться наверх
Jack_A
Заголовок сообщения: Re: Датчик tcs320 и atmega328p
Добавлено: Ср мар 10, 2021 11:44:30
Друг Кота
Карма: 62
Рейтинг сообщений: 840
Зарегистрирован: Вт апр 24, 2007 07:45:40Сообщений: 5598Откуда: Minsk
Рейтинг сообщения: 0
Насчёт 7 не знаю, но в 4-ке я тупо копипастил текст из окна симулятора в редактор. Всё равно там надо ещё руками поработать - имена дать осмысленные и пр.
_________________
Вернуться наверх
Страница 1 из 1
[ Сообщений: 20 ]
Кто сейчас на форуме
Сейчас этот форум просматривают: BOB51 и гости: 29
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения