Problem mit Software Uart von Peter Dannegger

#2628710
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
Angehängte Dateien:
#2630328
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
Angehängte Dateien:
#2630673
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
#2630763
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 !
#2630789
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
#2632078
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
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren