Например TDA7294

Форум РадиоКот • Просмотр темы - Датчик tcs320 и atmega328p
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 14:28:00

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 20 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Датчик 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;
}


}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: 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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Датчик tcs320 и atmega328p
СообщениеДобавлено: Вс мар 07, 2021 07:38:14 
Встал на лапы

Зарегистрирован: Вс фев 21, 2021 13:01:40
Сообщений: 80
Откуда: Прокопьевск
Рейтинг сообщения: 0
Но код не работает


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Датчик tcs320 и atmega328p
СообщениеДобавлено: Вс мар 07, 2021 19:55:52 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 141
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1384
Рейтинг сообщения: 0
Подсказка. Разберитесь для начала, что такое DDRx PORTx. Также, как правильно выставлять управлять отдельными битами портов.


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: 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 >> 8);
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-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Датчик tcs320 и atmega328p
СообщениеДобавлено: Пн мар 08, 2021 11:10:45 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 840
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 5592
Откуда: 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;

}

}

_________________
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: 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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Датчик tcs320 и atmega328p
СообщениеДобавлено: Пн мар 08, 2021 22:34:40 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 840
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 5592
Откуда: Minsk
Рейтинг сообщения: 0
Нужно знать - в чём проявляется ошибка, что требуется - и что делает фактически.
Да, я все свои поделки кропал на асме, в прошлом тысячелетии :) . Но если уточнишь (см. выше) - попробуем помараковать.
Непонятная прога. Зациклена, непрерывно передаёт в UART букву m. Значения битов упр. регистров не смотрел пока.

_________________
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Датчик tcs320 и atmega328p
СообщениеДобавлено: Вт мар 09, 2021 02:58:02 
Встал на лапы

Зарегистрирован: Вс фев 21, 2021 13:01:40
Сообщений: 80
Откуда: Прокопьевск
Рейтинг сообщения: 0
Должна выводить непрерывно букву m на скорости 9600,а выводит знак '?' Заранее спасибо.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Датчик tcs320 и atmega328p
СообщениеДобавлено: Вт мар 09, 2021 10:29:00 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 840
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 5592
Откуда: Minsk
Рейтинг сообщения: 0
Что является приёмником ввода? Совпадают ли настройки UART у приёмника и передатчика? Частота кварца? Если МК тактируется от внутреннего RC генератора - могут быть грабли. Если есть осцилл - посмотреть - что действительно выводится. Для этого хорошо бы поставить небольшую задержку в цикле вывода.

_________________
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Датчик tcs320 и atmega328p
СообщениеДобавлено: Вт мар 09, 2021 10:39:55 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 141
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1384
Рейтинг сообщения: 0
Не понял, у вас в секции start зачем ret? Если она как отдельная функция, вопрос снят. Если нет, то вот одна ошибка уже есть. Вам нужно основной цикл закольцевать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Датчик tcs320 и atmega328p
СообщениеДобавлено: Вт мар 09, 2021 10:51:06 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 840
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 5592
Откуда: Minsk
Рейтинг сообщения: 0
Всё закольцовано. Но неправильно. :) Вот так будет лучше:
Код:
start:   RCALL INIT_USART
loop:   LDI R16,'m'
          RCALL UARTSEND
          rjmp loop
.........................
INIT_USART:......

_________________
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Датчик tcs320 и atmega328p
СообщениеДобавлено: Вт мар 09, 2021 11:58:31 
Друг Кота

Карма: 64
Рейтинг сообщений: 966
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4220
Откуда: Ижевск
Рейтинг сообщения: 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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Датчик tcs320 и atmega328p
СообщениеДобавлено: Вт мар 09, 2021 14:11:59 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 840
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 5592
Откуда: Minsk
Рейтинг сообщения: 0
По'стом выше это я уже отметил.

_________________
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: 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





Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Датчик tcs320 и atmega328p
СообщениеДобавлено: Вт мар 09, 2021 21:24:57 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 840
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 5592
Откуда: 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
.

_________________
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Датчик tcs320 и atmega328p
СообщениеДобавлено: Ср мар 10, 2021 06:46:45 
Встал на лапы

Зарегистрирован: Вс фев 21, 2021 13:01:40
Сообщений: 80
Откуда: Прокопьевск
Рейтинг сообщения: 0
Да так и правда будет лучше. Спасибо. А вот работа предыдущей программы. Изображение

Добавлено after 1 hour 10 minutes 7 seconds:
А ещё кто-нибудь знает как дизасемблирование делать в атмел студии 7?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Датчик tcs320 и atmega328p
СообщениеДобавлено: Ср мар 10, 2021 07:43:43 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 141
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1384
Рейтинг сообщения: 0
Вкладка View Disassembler


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Датчик tcs320 и atmega328p
СообщениеДобавлено: Ср мар 10, 2021 08:39:09 
Встал на лапы

Зарегистрирован: Вс фев 21, 2021 13:01:40
Сообщений: 80
Откуда: Прокопьевск
Рейтинг сообщения: 0
У меня нет такой вкладки


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Датчик tcs320 и atmega328p
СообщениеДобавлено: Ср мар 10, 2021 11:44:30 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 840
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 5592
Откуда: Minsk
Рейтинг сообщения: 0
Насчёт 7 не знаю, но в 4-ке я тупо копипастил текст из окна симулятора в редактор. Всё равно там надо ещё руками поработать - имена дать осмысленные и пр.

_________________
Изображение


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 20 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y