Kennt sich denn keiner von Euch mit UART aus???
Ich muss es heute noch hinbekommen, das mein Controller Daten von der seriellen Schnittstelle meines Computers empfängt!!!
Helft mir doch mal bitte....
Gebe eine Kiste Bier aus... ;o)
Grüße
popi
... und sagt mir mal kurz, wo denn der Controller springt, wenn also ein Datenwort empfangen wurde?
Ich verstehe nicht, wie/wo man jetzt in den Code die Routine einbringt, die dann ausgeführt wird, wenn Daten empfangen werden.
Seid Ihr bitte so nett und könnt mir das in der Code an die richtige Stelle einfügen und erklären, damit ich das verstehe.
Danke im voraus und Grüße
popi
Hier der Code:
#include <avr/io.h>
#include <avr/interrupt.h>
void init(void)
{
SREG = 0x80; //Interrupts enable
UCSR1A = (1 << RXC1); //nötig für Interrupt
UCSR1B = (1 << RXCIE1) | (1 << RXEN1); //RxCompleteInterruptEnable und Receiver Enable
UCSR1C = (1 << UCSZ10) | (1 << UCSZ11); //8 Datenbits, 1 Stoppbit, keine Parität
UBRR1 = 0x51; //Baudrate 9600 bei 8MHz Quarz
}
void main(void)
{
init();
}
Kennt sich denn keiner von Euch mit UART aus???
Ich muss es heute noch hinbekommen, das mein Controller Daten von der seriellen Schnittstelle meines Computers empfängt!!!
Helft mir doch mal bitte....
Gebe eine Kiste Bier aus... ;o)
Grüße
popi
UCSR1A = (1 << RXC1); //nötig für Interrupt
diese Zeile dürfte unnötig sein, da dieses Flag vom Controller gesetzt wird *glaub*
Das wäre dann ISR für Mega 8
...wo ist das Bier ?Code:ISR (USART_RXC_vect){ }
Linus TorvaldSoftware is like s e x: its better when its free.
Danke schon mal für die Bemerkung...
Wie schreibt man den einen Wert in das EEPROM?
Grüße
popi
Zum Problem UART: Mit Interrupt ist die Sache etwas verschärft. Versuch es noch man wie in dem Beispiel
https://www.roboternetz.de/wissen/in...statur-Echo.29
sozusagen einmal grundätzlich.
Und dann erst stürz' dich in Interrupts und andere Schweinereien.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Also ich habe auch ein Problem mit USART und wollt kein neuen Thread aufmachen:
Ich habe das myAVR Board 2.0 USB mit einem ATMega8L - 8PU drauf
Im Hyperterminal habe ich aktiviert:
Bps: 9600
Datenbits: 8
Parität: Keine
Stoppbits: 1
Flusssteurerung: Hardware
Also F_CPU hab ich auch schon 8Mhz probiert...
Habe schon mit Debug-LEDs rumgemacht und rausgefunden, dass er bei...
while ( !(UCSRA & (1 << RXC)) )
hängen bleibt. D.h. ja, dass keine Daten ankommen, oder ???
Jemand ne Idee?Code:#include <avr/io.h> #define F_CPU 3868400 #define USART_BAUD_RATE 9600 #define USART_BAUD_SELECT (F_CPU/(USART_BAUD_RATE*16L)-1) //----------------------------------------------------- void main() { char bZeichen; UCSRB = (1 << RXEN) | (1 << TXEN); UCSRC = (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0); UBRRL = (unsigned char) USART_BAUD_SELECT; while (1) { while ( !(UCSRA & (1 << RXC)) ) {} bZeichen = UDR; while (!(UCSRA & (1 << UDRE))) {} UDR = bZeichen; } }
Hallo,
normalerweise hats keine Flusssteuerung
evtl. wartet da einer drauf.
Funkt auch nciht...
Schau mal
https://www.roboternetz.de/wissen/in...#Tastatur-Echo
d.h, wenn es trotzdem nicht funzt:
Flußsteuerung: none
Der Quarz muß stimmen ! (+Fuses)
Und die Verbindung µC <> PC muß auch passen !
Tip: Mach erstmal "Hello, world !"
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Lesezeichen