mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik INT0 ISR Zeitversatz, für Startbiterkennung per Flanke von 1-wire Software UART


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe ein Problem mit dem Zeitversatz von einer Flanke am INT0 
Eingang zur Ausführung der INT0 ISR.

Anwendung: Eine Software UART über einen Pin des uC. Die fallende Flanke 
soll das Startbit erkennen und danach den Timer0 passend triggern.

uC: ATTiny45 @ 8 MHz, Clock prescaler ist 0

ISR'en: nur INT0 aktiv, alle anderen sind auskommentiert.


Hier meine Einstellungen:
// Set to falling edge
ClearBit(MCUCR, ISC00); 
SetBit(  MCUCR, ISC01); 

// Clear INT0 Flag
SetBit(GIFR, INTF0); 

// Enable INT0 Interrupt
SetBit(GIMSK, INT0);

bzw. die ISR:
ISR ( INT0_vect )
{
  char cSREG;
  cSREG = SREG; /* store SREG value */
  
  PORTB ^= (1<<PORTB0);

  SREG = cSREG; /* restore SREG value (I-bit) */
}


Das Problem ist, dass ich einen Zeitversatz von der Flanke zum togglen 
des Ports von 240us habe.

Auch der ASM Code im Lss file sieht nicht wirklich viel aus.

Somit kann ich nicht verstehen, warum der uC 1920 Ticks braucht um den 
Port zu tooglen.


Leider konnte ich diesbezüglich nichts im Tutorial oder bei google 
finden. Ist das Verhalten normal oder hab ich etwas vergessen?


Gruß
Daniel

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alles Fuses richtig gesetzt? Mit der langsamsten Clock und CKDIV8 könnte 
es gut sein, dass es so lange dauert.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel schrieb:

>
> ISR ( INT0_vect )
> {
>   char cSREG;
>   cSREG = SREG; /* store SREG value */
> 
>   PORTB ^= (1<<PORTB0);
> 
>   SREG = cSREG; /* restore SREG value (I-bit) */
> }
> 

Lass das SREG in Ruhe!
Darum kümmert sich schon der Compiler. Das ist nichts was dich als C 
Programmierer etwas angehen würde.

> Somit kann ich nicht verstehen, warum der uC 1920 Ticks braucht um den
> Port zu tooglen.

Kompletten Code

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Ratschläge.


Problem hat sich gelöst, es lag an der Eingangsbeschaltung. Ein 
Kondensator hatte aus meiner Flanke einen Aufladefkt gemacht.


Somit sind es nun nur noch 2 us ohne den C.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.