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


von Daniel (Gast)


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:
1
// Set to falling edge
2
ClearBit(MCUCR, ISC00); 
3
SetBit(  MCUCR, ISC01); 
4
5
// Clear INT0 Flag
6
SetBit(GIFR, INTF0); 
7
8
// Enable INT0 Interrupt
9
SetBit(GIMSK, INT0);

bzw. die ISR:
1
ISR ( INT0_vect )
2
{
3
  char cSREG;
4
  cSREG = SREG; /* store SREG value */
5
  
6
  PORTB ^= (1<<PORTB0);
7
8
  SREG = cSREG; /* restore SREG value (I-bit) */
9
}


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

von Tobi (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

Daniel schrieb:

>
1
> ISR ( INT0_vect )
2
> {
3
>   char cSREG;
4
>   cSREG = SREG; /* store SREG value */
5
> 
6
>   PORTB ^= (1<<PORTB0);
7
> 
8
>   SREG = cSREG; /* restore SREG value (I-bit) */
9
> }
10
>

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

von Daniel (Gast)


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.

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.