Forum: Compiler & IDEs Problem mit Software Uart von Peter Dannegger


von Pier S. (bigpier)


Angehängte Dateien:

Lesenswert?

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

von Peter D. (peda)


Lesenswert?

Soll das ne Ratestunde werden?

Welches Target?
Compilierbare (ohne Warnings, Errors) Source als Anhang (Zip) mit allen 
Compileroptionen.


Peter

von Pier S. (bigpier)


Angehängte Dateien:

Lesenswert?

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

von Niffko _. (niffko)


Lesenswert?

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

von Pier S. (bigpier)


Lesenswert?

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 !

von Niffko _. (niffko)


Lesenswert?

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

von Pier S. (bigpier)


Angehängte Dateien:

Lesenswert?

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

von Niffko _. (niffko)


Lesenswert?

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

von Spiky (Gast)


Lesenswert?

Hallo,

läuft der code auch auf einem mega168PA?

Grüße

von Spiky (Gast)


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.