Например TDA7294

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



Текущее время: Вт мар 09, 2021 01:46:16

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


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



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Датчик tcs320 и atmega328p
СообщениеДобавлено: Вс фев 21, 2021 17:32:27 
Родился

Зарегистрирован: Вс фев 21, 2021 13:01:40
Сообщений: 6
Рейтинг сообщения: 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( еchо )
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
Сообщений: 6
Рейтинг сообщения: 0
Одну ошибку нашёл в data-ini не тот бин на вход

Добавлено after 3 minutes 19 seconds:
Тут как с дальномером Hs-spor4

Добавлено after 28 seconds:
Тут как с дальномером Hs-spor4


Вернуться наверх
 
Друзья! Скоро Новый Год! Китайский! Но мы работаем и в праздники тоже!

JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Отличное качество, подтвержденное более чем 600,000 пользователей! Более 10,000 заказов в день.

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/quote

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

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


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

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

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

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


Вернуться наверх
 
Запускаем новый BLE 5.2-чип BlueNRG-LP от STMicroelectronics

Любая разработка начинается с чтения документации и изучения доступных средств разработки. Данный материал целиком посвящен средствам разработки, включая детальные инструкции по запуску вашего первого приложения на BlueNRG-LP. Описана работа с отладкой STEVAL-IDB011V1, набором инструментов и пакетом ПО позволяющим разработчику быстро войти в курс дела.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Датчик tcs320 и atmega328p
СообщениеДобавлено: Пн мар 08, 2021 07:48:46 
Родился

Зарегистрирован: Вс фев 21, 2021 13:01:40
Сообщений: 6
Рейтинг сообщения: 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 еchо = 2; // назначаем имя для Pin9
volatile unsigned char status;
volatile int tim = 0;
ISR(INT0_vect)

{
//проверяем уровень синала PD2( еchо )
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); // назначаем еchо, как вход
}
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 секунду
}
}


Вернуться наверх
 
Революция в силовой электронике. Начало

Что привлекает в SiC по сравнению с кремнием, и какие особенности делают компоненты SiC часто используемыми, несмотря на более высокую стоимость в сравнении с кремниевыми высоковольтными устройствами? – Объясняет специалист ведущего разработчика силовых приборов из карбида кремния, компании Infineon.

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

Карма: 50
Рейтинг сообщений: 689
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 4427
Откуда: 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
Сообщений: 6
Рейтинг сообщения: 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 
Друг Кота
Аватар пользователя

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

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


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

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


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

Сейчас этот форум просматривают: beoro и гости: 12


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

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


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