im Methode "void X1_int(void) __interrupt (2)" gibt es eine Pause sagt "Timer laden so dass in state 2 bei 75us abgefragt wird", aber "TH1=128 TL1=53" mit "8-Bit autoreload", so die Pause ist 203*0.27127us=55us.
wieso??
Timer1 Interrupt-time Pause im state-machine erklaeren?
-
- Beiträge: 645
- Registriert: 17. Mai 2013, 20:57
- Kontaktdaten:
Re: Timer1 Interrupt-time Pause im state-machine erklaeren?
ohne jetzt genau nachzudenken....
zum einen vergeht ja vom Ereignis bis zur codestelle bereits Zeit...
zum anderen wird im reload nicht der Wert des nächsten sondern des
übernächsten Wertes geladen. wir ändern den reload, nicht den laufenden timer.
zum einen vergeht ja vom Ereignis bis zur codestelle bereits Zeit...
zum anderen wird im reload nicht der Wert des nächsten sondern des
übernächsten Wertes geladen. wir ändern den reload, nicht den laufenden timer.
liebe Grüße
Andreas
Andreas
Re: Timer1 Interrupt-time Pause im state-machine erklaeren?
Hallo
zum einem, ja, du hast recht. Wie kann Man diese Zeit erwarten/berechnen?
Und du meinst die Zeit ist:
(256-53+128)*0.27127??
zum einem, ja, du hast recht. Wie kann Man diese Zeit erwarten/berechnen?
Und du meinst die Zeit ist:
(256-53+128)*0.27127??
-
- Beiträge: 645
- Registriert: 17. Mai 2013, 20:57
- Kontaktdaten:
Re: Timer1 Interrupt-time Pause im state-machine erklaeren?
Um zu wissen wie viel Zeit bis dahin vergeht gibt es 2 Möglichkeiten:
1. Man schaut sich den ASM output an und zählt Befehlszyclen.
2. Man gibt den laufenden timer auf den uart aus.
Also so ähnlich:
uchar temp = THL;
SBUF = temp;
while ! TI;
vom ausgebenen Wert sind die für die Ausgabe verbrauchten Zyclen noch ab zu ziehen.
Da die Warteschleife TI in den Empfang reinpfuscht ist nur der erste empfangene Wert gültig.
Das ist jetzt Theorie, wir hatten damals zyclen gezählt. Ferner zum Abfragezeitpunkt einen Portpin gesetzt und mit Oszilloscope mit dem Bussignal verglichen.
1. Man schaut sich den ASM output an und zählt Befehlszyclen.
2. Man gibt den laufenden timer auf den uart aus.
Also so ähnlich:
uchar temp = THL;
SBUF = temp;
while ! TI;
vom ausgebenen Wert sind die für die Ausgabe verbrauchten Zyclen noch ab zu ziehen.
Da die Warteschleife TI in den Empfang reinpfuscht ist nur der erste empfangene Wert gültig.
Das ist jetzt Theorie, wir hatten damals zyclen gezählt. Ferner zum Abfragezeitpunkt einen Portpin gesetzt und mit Oszilloscope mit dem Bussignal verglichen.
liebe Grüße
Andreas
Andreas
Re: Timer1 Interrupt-time Pause im state-machine erklaeren?
aber wieso im "void init_rx(void)" die Zeit sagt
"// busfree Zeit = 15 Bit (auf ACK) + 11 Bit (ACK) + 53 Bit=79bit"
und TH1=0x89, TL1=0xAF
also t=(0xFFFF-0x89AF)*0.27127=8216us=79bit
"// busfree Zeit = 15 Bit (auf ACK) + 11 Bit (ACK) + 53 Bit=79bit"
und TH1=0x89, TL1=0xAF
also t=(0xFFFF-0x89AF)*0.27127=8216us=79bit
-
- Beiträge: 645
- Registriert: 17. Mai 2013, 20:57
- Kontaktdaten:
Re: Timer1 Interrupt-time Pause im state-machine erklaeren?
Zwischen den Telegrammen ist eine gewisse Zeit einzuhalten. Hier wird der T1
auf 16 bit umgestellt.
auf 16 bit umgestellt.
liebe Grüße
Andreas
Andreas
Re: Timer1 Interrupt-time Pause im state-machine erklaeren?
die Frage ist:
wieso hier im "init_rx" muss Man auf 79bit warten?
die Zeit ist zwischen den Telegrammen order
zwischen ACK and der Telegramme (50 bit order 53 bit sein?)
?
wieso hier im "init_rx" muss Man auf 79bit warten?
die Zeit ist zwischen den Telegrammen order
zwischen ACK and der Telegramme (50 bit order 53 bit sein?)
?
Re: Timer1 Interrupt-time Pause im state-machine erklaeren?
Keine Antwort??