Я делаю небольшой проект, в котором я хочу передать текст через кабель на мой Atmega328p.
Сначала я создал проект на Arduino Uno (с чистым C), где передача работает.
Теперь я переключился на автономный 328p и попробовал там.
Но теперь проблема в том, что мое прерывание RX-Complete запускается слишком рано. Фактически он даже запускается, когда ничего не передается. Он сработает, когда я прикоснусь к кабелю (изолированным частям).
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/setbaud.h>
void setup(void){
CLKPR = 0;
//Set Output
DDRC |= (1 << PC0) | (1 << PC1) |(1 << PC2) |(1 << PC3) |(1 << PC4) | (1 << PC5);
DDRD |= (1 << PD6) | (1 << PD7);
// Interrupts
sei();
// Init UART
// Set baud
UBRR0H = UBRRH_VALUE;
UBRR0L = UBRRL_VALUE;
#if USE_2X
UCSR0A |= (1 << U2X0);
#else
UCSR0A &= ~(1 << U2X0);
#endif
// Enable UART Receive and Receivecomplete Interrupt
UCSR0B = (1<<RXEN0) | (1 << RXCIE0);
// Set frameformat to 8 Data and 1 Stopbit
UCSR0C = ((1<<UCSZ00)|(1<<UCSZ01));
}
int main(void){
setup();
while(1){
}
return 0;
}
ISR(USART_RX_vect){
// Enable some LEDs
}
Изменить: изображение моей установки:
Я использую Arduiono только для питания своей макетной платы. 5V и GND подключены. Интернет-провайдер AVR MKII подключен через несколько контактов для прошивки микроконтроллера. Два кабеля используются для UART RX.
Кнопка предназначена только для СБРОСА
Изменить 2: я просто попытался включить его через внешний источник и raspberrypi. Эффект везде одинаковый