Kann vllt jemand mein erstes Programm kontrollieren

Gast #1294678
Lesenswert?

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
Angehängte Dateien:
#1294684
Lesenswert?

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
int main()
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.
Gast #1294693
Lesenswert?

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
#1294694
Lesenswert?

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.
Gast #1294699
Lesenswert?

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
Gast #1294861
Lesenswert?

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
Gast #1294898
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren