Hallo,
ich interessiere mich seit einigen Wochen relativ stark für die
Mikrocontrollerprogrammierung.
Ich habe mein erstes Programm fertig, wenn es denn das tuen würde, was
ich möchte das es tut.
Das Programm soll mit entsprechender Hardware ein Bodenumschalter für
eine Gitarre werden.
Testweise habe ich heute alles mit Schaltern, Tastern und LEDs(später
sollen statt LEDs Relais geschaltet werden) aufgebaut. Einige Leds
leuchten auch, jedoch macht das Programm nicht das was es tuen sollte.
Im Simulator des AVR Studios macht das Programm komischerweise alles so
wie es soll.
Es wäre super nett, wenn mir jemand bei meinem ersten (bestimmt nicht
besonders elegantem) Programm helfen könnte.
Im Anhang findet ihr den Programmtext.
Vielen Dank
Du hast einen Karindalfehler begangen:
Du hast viel zu viel Code geschrieben, ehe du ihn das erste mal auf der
richtigen Hardware laufen lässt.
Jetzt stehst du mit einem Berg von Code da, der nicht funktioniert und
weist nicht wo du anfangen sollst.
Fang so an:
1
#include<avr/io.h>
2
3
intmain()
4
{
5
}
(ohne Scherz)
Das compilierst du und brennst du in den µC
Dann fängst du an, in kleinen Stücken Teile aus deinem Programm zu
übernehmen. Es müssen dabei Teile sein, die in sich geschlossen sind.
Möglichst kleine Teile aber soweit vollständig, dass du sie auf der
realen Hardware testen kannst. Wenn du dazu kurzfristig ein paar
LED-Ausgaben zur Funktionskontrolle hinzufügen musst, dann ist das auch
kein Beinbruch. Die kann man im Nachhinein wieder entfernen.
Und so erweiterst du das Minimal-Primitiv Programm sukzessive um immer
weitere Funktionen und korrigierst dabei auftretende Fehler und
Probleme.
Ich werde das die nächsten Tage versuchen. Mich wundert aber stark, dass
es im Simulator des AVR-Studios problemlos läuft. Wie kann das kommen?
Was zuverlässig funktioniert ist übrigens das Einschalten der LED an
PinD4, wenn der Schalter an PinD0 umgelegt wird.
Also Danke schonmal für deine Hilfe, es wäre aber trotzdem super, wenn
du oder wer anders nochmal über meinen code gucken könnte und mir vllt
ein paar Fehler die ich begangen habe nennt. Das würde mir denke ich
sehr weiter Helfen.
Danke nochmal
Schumi schrieb:
> Ich werde das die nächsten Tage versuchen. Mich wundert aber stark, dass> es im Simulator des AVR-Studios problemlos läuft. Wie kann das kommen?
Der Simluator ist auch nicht fehlerfrei.
Deine Hardware kann Mucken machen. Insbesonere Taster können dir durch
Prellen den Tag vermiesen.
> Also Danke schonmal für deine Hilfe, es wäre aber trotzdem super, wenn> du oder wer anders nochmal über meinen code gucken könnte und mir vllt> ein paar Fehler die ich begangen habe nennt. Das würde mir denke ich> sehr weiter Helfen.
Sorry. Aber das tu ich mir nicht an. Das ist mir zu umfnagreich um das
jetzt zu analysieren. Wenn du wenigstens sagen könntest: Konkret dieses
und jenes funktioniert nicht. Dann könnte man gezielt den Code
durchforsten. Aber so ist mir das einfach zuviel als dass ich mich da
jetzt 3 Stunden hinsetze und die Logik analysiere.
Ok... entschuldigung, ich dachte, dass das relativ schnell geht.
Also, Wenn ich den Schalter an PinD0 umlege leuchtet sofort und
zuverlässig Die LEDPD4.
Außerdem leuchten durchgängig die LED PC0, PD5, PD6, PD7, PC6.
Wenn ich den Schalter PIND0 öffne erlischt die LED PD4, die anderen 5
leuchten weiter.
Diese Situation lässt sich durch nichts ändern, weder durch drücken der
Taster an PINA0-7 noch durch ein Strom weg/Strom an für die Schaltung.
Wenn ich den Schalter an PIND4 sehr oft umlege leuchten aber nur noch 3
der 5 Leds, bis ich ihn ein weiteres mal umlege, dann leuchten wieder
die 5 (aber nur in vllt 5% der Fälle, also bei ca. jedem 20. mal
öffnen/schließen von Schalter PD0)
mfg
Schumi
außerdem:
du hast keine Entprellung der Tasten.
Du schreibst in einer Endlosschleife ins EEPROM -> nach ein paar Minuten
ist der kaputt (1000000 Schreibzyklen, siehe Datenblatt)
Hallo,
vielleicht habe ich es uebersehen, aber der Prozessortyp ist mir unklar.
Wenn es einer mit JTAG ist dann muss der ausgeschaltet werden, ich habe
da mal zwei Wochen dran herumgesucht. JTAG aus wenn vorhanden!!
Viel Erfolg
Thomas
Es ist ein Atmega 16. Ich werde dann gleich mal ersuchen JTAG
auszuschalten.
Schreibe ich wirklich in einer endlosschleife ins eeprom? ich schreibe
doch nur ins eeprom wenn bestimmte ereignisse eintreten, also bestimmte
daster gedrückt werden ?
Danke für eure Hilfe
Ein möglicher Grund für komisches Verhalten in der Schaltung, obwohl der
Simulator durchläuft ist auch, wenn man Variablen nicht initialisiert.
Wenn du bei deinen Tastereingängen keinen Pullup spendiert hast kommts
hier auch zu undefinierten Zuständen. Taster werden als gedrückt
erkannt, obwohl sie offen sind...
Wenn man die Fehler in dem Code finden will braucht man auf jeden Fall
nen Schaltplan. Ohne wirds nur Stochern im Dunkeln.
Und eben wie oben schon gesagt wurde: Alles der reihe nach und erst wenn
der Teil läuft einen neuen hinzufügen.
Sebastian