Tervitus
Pea kohale on kogunenud mustad murepilved ehk ei saa USART'i ppäris hästi käima. Nimelt ei toimi RS-232 formaadis saatmine nii nagu peaks. Tutorialist pärit testprogrammidega, kus pollimisega sissetulev peegeldatakse välja tagasi, tuleb esimene sümbol ilusti tagasi ja ka teine, kui on tegemist CR-ga, muidu alates teisest sümbolist nihkes. Tundub nagu UDR-ile liituks saates mingi jääkvärtus, kuigi registrid peaksid olema tühjad.
Kui proovin lihtsalt saata mingit sümbolit, seda kas dec, bin või hex süsteemis (ning isegi ascii char-ina), on tulemus suht ette arvamatu... mingil hetkel arvujadasid saates paistis, et väljund hex-is alla E0 ei lange.
Kivi: Atmega8-16PU, clk sisemine 8MHz(fuse-id paigas), baud 4800 ja prescaler defineeritud 103 (viga lubatud 0,2%), asünkroonne USART läbi MAX232N, formaat 8N1 voojuhtimiseta, RS-232 kuulan Docklight 1.6-ga(proovitud nii läpaka USB->Com, kui ka PC-l COM kaudu).
Kood kompileerub ja imbub ilusti kivisse... kasutan AVRStudio 4.13, AVRISPmkII, raua poole pealt paistab kõik korras olema...
Lihtsalt ei näe viga...
Allpool toodud kood on saatmise proovimiseks, kuid sisaldab ka 'echo' funktsioone.
Pea kohale on kogunenud mustad murepilved ehk ei saa USART'i ppäris hästi käima. Nimelt ei toimi RS-232 formaadis saatmine nii nagu peaks. Tutorialist pärit testprogrammidega, kus pollimisega sissetulev peegeldatakse välja tagasi, tuleb esimene sümbol ilusti tagasi ja ka teine, kui on tegemist CR-ga, muidu alates teisest sümbolist nihkes. Tundub nagu UDR-ile liituks saates mingi jääkvärtus, kuigi registrid peaksid olema tühjad.
Kui proovin lihtsalt saata mingit sümbolit, seda kas dec, bin või hex süsteemis (ning isegi ascii char-ina), on tulemus suht ette arvamatu... mingil hetkel arvujadasid saates paistis, et väljund hex-is alla E0 ei lange.
Kivi: Atmega8-16PU, clk sisemine 8MHz(fuse-id paigas), baud 4800 ja prescaler defineeritud 103 (viga lubatud 0,2%), asünkroonne USART läbi MAX232N, formaat 8N1 voojuhtimiseta, RS-232 kuulan Docklight 1.6-ga(proovitud nii läpaka USB->Com, kui ka PC-l COM kaudu).
Kood kompileerub ja imbub ilusti kivisse... kasutan AVRStudio 4.13, AVRISPmkII, raua poole pealt paistab kõik korras olema...
Lihtsalt ei näe viga...
Allpool toodud kood on saatmise proovimiseks, kuid sisaldab ka 'echo' funktsioone.
Kood:
#include <avr/io.h> #include <avr/interrupt.h> #include <inttypes.h> #define F_CPU 8000000UL #define USART_BAUDRATE 4800 #define BAUD_PRESCALE 103 #include <util/delay.h> void init_USART(void) { UCSRB |= (1 << RXEN) | (1 << TXEN); // RX, TX on UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1); // Use 8-bit character sizes - URSEL bit set to select the UCSRC register UBRRL = BAUD_PRESCALE; // lower 8-bits UBRRH = (BAUD_PRESCALE >> 8); // upper 8-bits } char USARTReadChar() { //Wait untill a data is available char data; while(!(UCSRA & (1<<RXC))) { //Do nothing } //Now USART has got data from host //and is available is buffer data = UDR; return data; } void USARTWriteChar(char data) { //Wait untill the transmitter is ready while(!(UCSRA & (1<<UDRE))) { //Do nothing } //Now write the data to USART buffer UDR = data; return; } int main(void) { DDRB = 0xFF; PORTB = 0x00; DDRC = 0xFF; PORTC = 0x00; DDRD = 0xFF; PORTD = 0x00; init_USART(); for(;;) // and sh*t hits the fan { // Loop until UDR register is empty while((UCSRA & (1 <<UDRE)) == 0); // Transmit letter a UDR = 0x61; }; }
Comment