Forum: Mikrocontroller und Digitale Elektronik Anfänger braucht Hilfe


von AndreasN83 (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

habe eine Routine geschrieben um ein 2x16 Zeichen LCD zu steuern.
Das funktioniert auch alles wunderbar. Nur wenn ich dann ein paar mal
hintereinander den INT0 Eingang betätige stürzt das Dingen ab und das
LCD zeigt nur noch einen schwarzen Balken. Nach einem Reset läuft es
wieder hoch und initalisiert sich. Aufgebaut ist alles auf eine
Evolution Board von Pollin.Bei dem INT1 Eingang passiert es nicht. Den
Source habe ich mal angehangen ich hoffen mir kann jemand helfen.

MFG
Andreas

von AndreasN83 (Gast)


Angehängte Dateien:

Lesenswert?

ups falsche datei

von Axel R. (Gast)


Lesenswert?

Du hast vergessen, die Interrupttabelle anzulegen.

Beim INT0 springt dein Programm hier irgentwo hin

;Datenrichtungen festlegen
  ldi temp_LOW, 0xff                ;Ausgänge
  out ddrc, temp_low                ;PORTC = Ausgänge
  out ddrb, temp_low                ;PORTB = Ausgänge
  ldi temp_LOW, 0b11100001
  out ddrd, temp_low                ;PORTD
gut, dann werde eben die Ausgänge neu gesetzt. Da du aber nirgentwo ein
RETI drinn hast, (wofür auch) wird dein "STAPELZEIGER" immer weniger,
bis er ins PRogramm zeigt und die Kiste irgentwann abschmiert.

Ich hoffe das stimmt soweit, bzw. dass ich mich so ausgedrückt habe,
dass Du was mit anfangen konntest. Man kann mich ja korrigieren.

Gruß
AxelR.

von AndreasN83 (Gast)


Lesenswert?

Hallo,
und schonmal danke für die Antwort. Das habe ich mir auch schon fast
gedacht wie lege ich denn so eine Interrupt Tabelle an. Hab auch schon
versucht sie im GIMSK zu deaktivieren hat aber auch nicht gebracht.


MFG
Andreas

von johnny.m (Gast)


Lesenswert?

Interrupt-Tabelle steht in jedem Datenblatt ziemlich weit vorne drin
(Mega16 Datenblatt Seite 44). Kannste praktisch 1:1 übernehmen. Habe in
Deinem Programm allerdings kein sei gesehen, dürfte also eigentlich gar
keine Reaktion geben. Die Vektortabelle wird ja nur dann angesprungen,
wenn ein Interrupt auftritt. Oder hab ich das sei ÜBERsehen?

Gruß

Johnny

von johnny.m (Gast)


Lesenswert?

...Ergänzung: Bei den Interrupts, die Du nicht benutzt, solltest Du dann
natürlich anstelle von 'jmp irgendwohin' ein 'reti' reinschreiben,
damit bei einer unbeabsichtigten Fehlkonfiguration der µC nicht ins
Nirwana springt und komplett abstürzt.

von AndreasN83 (Gast)


Lesenswert?

Hab im Programm kein sei drin.
Das machte mich auch stutzig wieso der abk....
Und das komische ist das es nur beim INT0 eingang passiert wenn ich
INT1 oft betätige passiert nichts.

MFG

von Axel R. (Gast)


Lesenswert?

stimmt: ohne SEI dürte garnichts passieren.
Dann mal ganz blöd denken.
Ist der INT0 als Ausgang initialisiert? dann ist es vlt. ein
Kurzschluss, wenn Du INT0 nach Masse "tippst"?

von AndreasN83 (Gast)


Lesenswert?

Meistens ist es ja was einfaches.
leider diesmal richtig Deklariert.:-)
Versteh das bald nimmer :-)
hab portd mal komplett als eingang geschaltet aber auch das brachte
keine verbesserung.

von AndreasN83 (Gast)


Lesenswert?

Fehler gefunden. JUHU
Also ich habe den eingang einfach mal öfters mit einem Draht direkt auf
5V gebrückt nichts passierte. Neuen Taster rein. und es funzt.

MFG

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.