Forum: Mikrocontroller und Digitale Elektronik Atmel hängt sich auf??


von danczi (Gast)


Lesenswert?

Hallo!
Habe ein riesengroßes problem!

Ich habe eine art Aquariumsteuerung gebaut und programmiert! Ich habe 
auf einem atmega 16 ein display 7 taster die mit einem 100nF Kondensator 
entprellt werden, 4 transistorausgange und 3 leds hängen! ich habe mit 
bascom schon fast die ganze steuerung programmiert. NUR, der atmel hängt 
sich immer auf. und zwar nur dann wenn ich einen oder mehrere taster 
ganz schnell drücke. auf dem display habe ich auch eine uhr 
programmiert. wenn der atmel mehr oder weniger in leerlauf rennt (wenn 
nur die uhr läuft) dann funktioniert der atmel tadelos. ich habe die 
taster so programmiert das wenn ich einen taster drücke das der atmel in 
eine schleife reingeht und sobald ich den taster wieder loslasse führt 
er den gewünschten befehl aus (die schleife habe ich deswegen gemacht 
das der atmel den befehl erst ausführt wenn die den taster losgelassen 
habe sonst würde er den befehl ein paarmal ausführen).

Liegt das an der programmierung? ich habe schon gehört das der atmel 
sich aufhängen kann wenn sich störungen in der schaltung befinden (von 
einem magnetfeld induziert???).

bitte um eure hilfe

von Analog (Gast)


Lesenswert?

Es kann an der Programmierung oder an der Hardware liegen.

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Kann es sein dass Du keine Interrupts und timer verwendet hast? Dann ist 
das klar.

Aber bei solchen Posts kann man nur spekulieren. Schaltplan und Code 
anhaengen dann kann Dir geholfen werden. Aber nicht von mir, da ich beim 
Anblick von BASIC Brechreiz bekomme ;)

von Hannes J. (Firma: eHaJo.de) (joggl) Benutzerseite Flattr this


Lesenswert?

Also ich gehe mal stark davon aus, dass es an deinem Programm liegt. Ich 
bezweifle, dass dein Aquarium solche Magnetfelder erzeugt dass die Bits 
im Flash kippen.

Vielleicht liegts an der Auswertung der Schalter. Frägst du die über 
Interrupts ab? Hängt sich irgend eine Schleife auf mit der du die Taster 
pollst? Springst du in Unterprogramme wenn der Taster gedrückt wird die 
viell unabsichtlich Register verändern???

/hannes

von Axel H. (mf-futzi)


Lesenswert?

Hallo  danczi,

hast du den Befehl 'debounce' (Tasten-Entprellung) verwendt? Wie schon 
oben gesagt, braucht man den Code, um helfen zu können.

von danczi (Gast)


Lesenswert?

naja die steuerung ist ja noch nicht im einsatz!! darum liegt sie noch 
am schreibtisch! ich habe einfach lauter "hauptprogramm" und eine 
"unterprogramme" gemacht! Im hauptprogramm fragt er immer den zustand 
von dem taster ab! wenn der taster gedrückt wird springt er in eine 
schleife die sich im hauptprogramm befindet´; wird der taster 
losgelassen springt er dann in das jeweilige unterprogramm. ist das 
unterprogramm ausgeführt springt er wieder in das hauptprogramm zurück.

von danczi (Gast)


Lesenswert?

nein hab ich nicht!! ist das die entprellung im programm unbedingt 
notwendig wenn ich das schon in der hardware mit einem 100n kondensator 
gemacht habe?

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Schaltplan? Code?

von danczi (Gast)


Lesenswert?

code: poste ich das projekt
schaltplan: eagle datei

poste ich am abend habs gerade nicht bei mir

von Daniel C. (danczi)


Angehängte Dateien:

Lesenswert?

hier der code

von Paul Baumann (Gast)


Lesenswert?

Ich sehe, daß Du die Taster nicht entprellt hast und die Taster offenbar
von +UB nach den Eingängen gehen. Das ist ungünstig, weil Du dann immer 
externe Ziehwiderstände nach Masse haben mußt, damit die Eingänge nicht 
"in der Luft hängen".

Mach es mal anders herum, d.h. Taster gegen Masse und die internen 
Ziehwiderstände aktivieren. Zum Entprellen kannst Du den DEBOUNCE-Befehl
verwenden.

MfG Paul

von Klaus (Gast)


Lesenswert?

Bitte, bitte, bitte, verwende nie wieder das Wort "Ziehwiderstand". Das 
tut in den Ohren bzw. Augen weh!

Ok, man muss nicht überall sinnlos englische Begriffe verwenden, aber 
man kann es auch mit dem Eindeutschen übertreiben oO

von Daniel C. (danczi)


Lesenswert?

ich habe das die entprellung mit einem 100n kondensator und einen 10k 
wiederstand am masse gemacht. müsste ja auch funktionieren oder? auch 
wenn ich das schon extern gemacht habe, muss ich dann das im code auch 
noch machen?

von Fabian B. (fabs)


Lesenswert?

10k*100n sind grad 1ms. Das kann schon zu wenig sein, wenn die Taster 
arg prellen.
Nimm nen SW-Debounce dazu und es sollte sicher sein...

Gruß
Fabian

von Paul Baumann (Gast)


Lesenswert?

@Klaus
Der Ausdruck "Ziehwiderstand" ist mir schon vor Jahrzehnten in Fleisch 
und Blut übergegangen und ich weigere mich, mit englischen Begriffen zu 
arbeiten, wenn es auch auf Deutsch geht. Bis jetzt hat man mich immer 
noch verstanden. Es ist mir gelinde gesagt auch ziemlich Brust, ob das 
Jemandem
in Augen und Ohren schmerzt.

MfG Paul

von Peter D. (peda)


Lesenswert?

Klaus wrote:
> Bitte, bitte, bitte, verwende nie wieder das Wort "Ziehwiderstand". Das
> tut in den Ohren bzw. Augen weh!

Was hast Du gegen Ziehwiderstand, ist doch richtig.
Paßt sogar besser, man muß nicht extra Pullup/down unterscheiden.


Peter

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Paßt sogar besser, man muß nicht extra Pullup/down unterscheiden.

Ja, stimmt. Man schreibt stattdessen viel einfacher "Ziehwiderstand nach 
Masse" ...

von Der M. (steinadler)


Lesenswert?

Rufus t. Firefly wrote:
>> Paßt sogar besser, man muß nicht extra Pullup/down unterscheiden.
>
> Ja, stimmt. Man schreibt stattdessen viel einfacher "Ziehwiderstand nach
> Masse" ...

Bei negativen Spannungen ist das sogar eindeutiger, oder wo zieht ein 
Pulldown da hin?

von Daniel C. (danczi)


Lesenswert?

aber nur weil die taster jetzt nicht enprellt sind hängt sich ja der 
atmel nicht auf oder? weil normalerweise führt er ja dann die funktionen 
ein paar mal aus oder ist das dann für den atmel zuviel bzw zuschnell?

von Peter D. (peda)


Lesenswert?

Daniel Czipin wrote:
> aber nur weil die taster jetzt nicht enprellt sind hängt sich ja der
> atmel nicht auf oder?

Kann man schwer sagen.
Da Du aber sagst, er hängt sich auf, wenn man zu schnell drückt, sollte 
das der Ansatz sein, den Fehler in der Software zu suchen.
Da Dein Code weder strukturiert noch kommentiert ist, mußt Du das selber 
machen.
Es ist ein Irrglaube, daß Kommentare für einen selber nutzlos sind.


> weil normalerweise führt er ja dann die funktionen
> ein paar mal aus oder ist das dann für den atmel zuviel bzw zuschnell?

Zu schnell gibt es für CPU nicht, sie macht immer einen Befehl nach dem 
anderen.
Es kann allerdings logische Fehler im Programm geben, z.B. daß auf ein 
Ereignis gewartet wird, was schon wieder vorbei ist.


Peter

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.