Ich habe ein Problem mit den externen Interrupts bei einem Attiny2313. Erst mal die Beschreibung der Funktion: Das Programm realisiert ein 16-Bit Schieberegister. Die Daten werden über PD0 eingelesen und mit PD2 weitergetaktet. An PD1 werden sie wieder herausgeschoben.Ein Strobe_Signal an PD3 übergibt das obere Byte an den Timer0, der eine PWM realisiert. Das untere Byte wird an Port B ausgegeben. An PD5 erscheint das PWM Signal, an PD4 und PD6 werden die Steuersignale für eine H-Brücke ausgegeben. Die Richtungsinformation liegt im Bit 0 von des Eingabewords. Die Steuersignal kommen vom PC (TXD als Strobe, DTR als Daten und RTS als Takt), prellen also auch nicht. Sie kommen auch, das habe ich mit einem anderen kleinen Programm im Tiny physisch getestet. Problem: Wenn ich INT0 auslöse, zählt es hoch, wie es soll. Löse ich aber INT1 aus, dann wird scheinbar INT0 auch gleich mit ausgeführt, denn es wird munter weiter im "Schieberegister" nach links geschoben. Das Alles im Simulator. In Natura passiert an Port B und an PD5 (das ist OCR0B von Timer 0) nichts. Ich weiß mir keinen Rat mehr, wo der Fehler liegt. :-( MfG Paul
Da wird Dich wohl der Simulator verar..albern... Abgesehen davon: Ich habe zwar keine Ahnung von BASIC, aber könnte man nicht
1 | Niederbyte.0 = Eingabe.0 'Aus dem Eingabeword die unteren |
2 | Niederbyte.1 = Eingabe.1 '8 Bit extrahieren und |
3 | Niederbyte.2 = Eingabe.2 'im Niederbyte speichern |
4 | Niederbyte.3 = Eingabe.3 |
5 | Niederbyte.4 = Eingabe.4 |
6 | Niederbyte.5 = Eingabe.5 |
7 | Niederbyte.6 = Eingabe.6 |
8 | Niederbyte.7 = Eingabe.7 |
9 | |
10 | Hochbyte.0 = Eingabe.8 'Aus dem Eingabeword die oberen |
11 | Hochbyte.1 = Eingabe.9 '8 Bit extrahieren und |
12 | Hochbyte.2 = Eingabe.10 'im Hochbyte speichern |
13 | Hochbyte.3 = Eingabe.11 |
14 | Hochbyte.4 = Eingabe.12 |
15 | Hochbyte.5 = Eingabe.13 |
16 | Hochbyte.6 = Eingabe.14 |
17 | Hochbyte.7 = Eingabe.15 |
durch:
1 | Niederbyte = Eingabe AND 255 'untere 8 Bit maskieren |
2 | Hochbyte = Eingabe / 256 'wenn der Compiler clever ist, dann macht er Byteshifting |
ersetzen? ...
@Hannes Ja, der Simulator hielt mich zum Narren. Dort wurde INT1 nicht ausgeführt. Am lebenden Objekt funktioniert es aber. Da kann man lange suchen, wenn es nur scheinbar nicht funktioniert. :-( Ich habe Deine Anregung mit beiden Befehlen getestet. Das funktioniert auch, wie es soll und macht die .hex Datei ein wenig kleiner als vorher. Danke. MfG Paul
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.