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
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 ;)
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
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.
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?
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
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
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?
@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
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
> Paßt sogar besser, man muß nicht extra Pullup/down unterscheiden.
Ja, stimmt. Man schreibt stattdessen viel einfacher "Ziehwiderstand nach
Masse" ...
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?
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?
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