Problem mit Software Uart von Peter Dannegger

OP #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:
OP #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
OP #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
OP #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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.