Guten Abend, ich versuche gerade vergeblich den Code aus folgendem Artikel Beitrag "Software UART mit FIFO" abzuändern. Das heißt ich möchte die Software beim empfangen auf Pin change umbauen und scheitere kläglich! Aus irgend einem Grund bringe ich den CompareB Interrupt nicht zum laufen.Ich sehe den Wald vor Bäumen nicht! Ich habe die SUART.c angehängt. Wäre sehr nett wenn jemand einen Blick drauf werfen könnte. Vielen Dank und schönes Wochenende Peter
Soll das ne Ratestunde werden? Welches Target? Compilierbare (ohne Warnings, Errors) Source als Anhang (Zip) mit allen Compileroptionen. Peter
Guten Abend, leider war ich heute im Außendienst. Entschuldigung das ich zu wenig Infos gegeben habe. Ich kann das Projekt zwar compilieren, aber der CompareB Interrupt wird nicht ausgeführt. Ich verwende den Atmega88. Die Compileroptionen sind: -funsigned-char -funsigned-bitfields -Os -fpack-struct -fshort-enums -Wall -c -gdwarf-2 -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -mmcu=($DEVICE) Vielen Dank und schönen Abend Peter
Hallo Peter, zwei Sachen sind mir beim schnellen Drüberschauen aufgefallen: 1. Da Timer1 im CTC-Mode permanent durchlaufen muss (eine Bitzeit), ist "TCNT1=0" keine gute Idee. Die TX-Abteilung (COMPA) findet das mit Sicherheit nicht lustig. Orientiere dich doch am Code in der ursprünglichen ICP-ISR. Du muss halt nur TCNT1 auslesen anstatt ICR1 zu benutzen. 2. Wieso setzt du den Beginn des Bitscans auf 1,5 Bitzeit? Das Scannen der Bits (COMPB) muss genau wie beim Original 0,5 Bitzeit nach Detektieren des Startbits erfolgen, da auch das Startbit in der COMPB-ISR gescannt wird. //Niffko
Danke für die Tips. Bin Heute wider unterwegs, heute Abend teste ich das ganze mit Deinen Tips. Noch eine frage im CTC Mode kann ich da überhaupt CompB Höher als CompA einstellen? Wird im Isr von CompA oder CompB der auf TCNT1 auf 0 gestellt? Ich hoffe das mein Gehirn keinen all zu großen Blödsinn verbreitet es ist wohl noch zu früh Danke schönen Tag Peter Ps bin für jeden Beitrag dankbar !
Pier S. schrieb: > Noch eine frage im CTC Mode kann ich da überhaupt CompB Höher als CompA > einstellen? > Wird im Isr von CompA oder CompB der auf TCNT1 auf 0 gestellt? Timer1 läuft bis "OCR1A = BIT_TIME - 1" und resettet dann automatisch (CTC). Gleichzeitig wird im COMPA das TX-Timing erledigt. Der RX-Zweig (COMPB) nutzt im Prinzip das selbe Timing mit einem gewissen Offset, welcher in der ICP-ISR (in deinem Fall PCINT-ISR) festgestellt wird. //Niffko
Guten Abend, jetzt läuft das Programm! Ich hatte diese Zeilen falsch verstanden!
1 | s16 i = ICR1 - BIT_TIME / 2; // scan at 0.5 bit time |
2 | |
3 | OPTR18 // avoid disoptimization |
4 | if( i < 0 ) |
5 | i += BIT_TIME; // wrap around |
6 | OCR1B = i; |
Vielen Dank für die Hilfe Und Danke an Peter Dannegger für die geniale Software! Peter
Na dann ist ja alles gut geworden. Ist schon so ... der Code ist eigentlich genial einfach, aber die Details erschließen sich teilweise erst beim zweiten Hinschauen. Pier S. schrieb: > Und Danke an Peter Dannegger für die geniale Software! *unterschreib //Niffko
Hallo, läuft der code auch auf einem mega168PA? Grüße
Hallo, ich habe mal meinen code drangehängt. Senden möchte ich über PD3, empfangen über PD2. Irgendwie funktioniert es aber nicht. Was mache ich verkehrt? Danke!!
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.