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
Hallo danczi, hast du den Befehl 'debounce' (Tasten-Entprellung) verwendt? Wie schon oben gesagt, braucht man den Code, um helfen zu können.
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?
code: poste ich das projekt schaltplan: eagle datei poste ich am abend habs gerade nicht bei mir
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?
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
@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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.