Forum: Mikrocontroller und Digitale Elektronik Kann vllt jemand mein erstes Programm kontrollieren


von Schumi (Gast)


Angehängte Dateien:

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

von Karl H. (kbuchegg)


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.

von Schumi (Gast)


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

von Karl H. (kbuchegg)


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.

von Schumi (Gast)


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

von muffel (Gast)


Lesenswert?

Mach mal nen Schaltplan.

von mp (Gast)


Lesenswert?

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)

von Thomas (Gast)


Lesenswert?

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

von Schumi (Gast)


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

von Sebastian (Gast)


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

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.