Hiho! da das bei mir irgendwie nciht hinhaut mit dem senden eines Zeichens über die serielle Schnittstelle, wollte ich mal fragen ob es nicht vielleicht schon eine Lib in C gibt die ein Software UART bereitstellt. Falls nicht vielleicht weiß ja jmd. warum bei mir folgender simpler Code fehlschlägt: (Hyperterminal empfängt 'Ç' (ASCII 128), statt 'U' (ASCII 85). //Include #include <IO.H> #include <IOM8.H> //Funktionsprototypen void delay417cycles(void); int main(void) { outp(0x66,DDRD); // config Port D while (1) { //Sende ein 'U' sbi(PORTD, PIND5); //Start delay833cycles(); cbi(PORTD, PIND5); //Bit1 delay833cycles(); sbi(PORTD, PIND5); //Bit2 delay833cycles(); cbi(PORTD, PIND5); //Bit3 delay833cycles(); sbi(PORTD, PIND5); //Bit4 delay833cycles(); cbi(PORTD, PIND5); //Bit5 delay833cycles(); sbi(PORTD, PIND5); //Bit6 delay833cycles(); cbi(PORTD, PIND5); //Bit7 delay833cycles(); sbi(PORTD, PIND5); //Bit8 delay833cycles(); cbi(PORTD, PIND5); //Stopp delay833cycles(); } } void delay833cycles(void) { asm volatile ( //----------------------------- // delaying 828 cycles: " ldi R17, 0x02" "\n\t" "WGLOOP6: ldi R18, 0x89" "\n\t" "WGLOOP7: dec R18 " "\n\t" " brne WGLOOP7 " "\n\t" " dec R17 " "\n\t" " brne WGLOOP6 " "\n\t" //----------------------------- //delaying 3 cycles: " ldi R17, 0x01" "\n\t" "WGLOOP8: dec R17 " "\n\t" " brne WGLOOP8 " "\n\t" //----------------------------- //delaying 2 cycles: " nop " "\n\t" " nop " "\n\t" //============================= : : ); }
Also eine Software-UART in C zu schreiben, geht nur, wenn man einen Timerinterrupt benutzt. Wenn man das Timing aber mit Delay-Loops machen will, geht das nur in Assembler, denn nur dann kann man die Instruktionen auszählen, um präzise Delays zu erzeugen. Peter
Hmm alles klar, aber gibts denn schon ein Software UART, welches man verwenden kann?
Also debuggt kriege ich meinen Code immer noch nicht. Es geht wohl wirklich nur über Timer, auch wenn mein Code schon sehr genau ausgemessen ist mit dem AVR-Studio. Ich werds nun wohl oder übel mal mit Timern probieren müssen. Ich habe nun schon mehrere Software UARTs die in Assembler geschrieben wurden gefunden, aber noch keinen in C. Hat das überhaupt schonmal jemand gemacht und kann hier mal seinen Code zur Verfügung stellen?
Hallo Benno Ist das vieleicht was für dich ? http://www.avrfreaks.net/phorum/read.php?f=2&i=4388&t=4388#4388
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.