Hallo Forum. Ich habe ein Problem, dass ich mit Suchen im Forum nicht lösen kann. Ich prauche Port D als LCD und UART-Port. Entsprechend habe ich nur noch PortB für Taster und LEDS. (AT90S2313) Hier im Forum wird immer nur der komplette Prot gelesen und entprellt. Hat vielleicht jemand ein Beispiel wie explizit ein bestimmter Pin abgefragt und entprellt werden kann ? Bin so langsam echt am Ende. By the way, ich bin Newbie und daher stelle ich mich vielleicht manchmal etwas blöd an - also seid bitte nachsichtig. Danke Carsten
Hallo, Du kannst doch den Port komplett einlesen und anschließend mit einer log. Verknüpfung die uninteressanten Pins "ausblenden": in r15,PINB andi r15,0b00000100 oder, falls der AT90S2313 den Befehl "andi" nicht kennt, dann halt: in r15,PINB ldi r16,0b00000100 and r15,r16 das löscht in r15 alle Bits, die mit Null AND-verknüpft werden. Hier bleibt nur Bit 2 (also PB2) übrig. Den Rest der Entprellerei kannst Du dann eigentlich wie beim ganzen Port machen. Gruß, Christoph
...genau das hatte mir gefehlt. Danke Dir. ...jetzt muss ich nur noch eine knappe Entprellroutine finden, die bei mir läuft. Die von Peter ( http://www.mikrocontroller.net/forum/read-4-20435.html#38426 ) bekomme ich partout nicht zum rennen. Ist aber auch ewig verwirrend mit diesem ganzen ge-And-e und ge-OR-e. Naja schaun mer mal . Vielleicht hat ja eine richtig kurze, gute und dokumentierte (so das ich sie verstehe grinsverlegen)
Naja, ich empfehle Dir, die Beispiele hier mal zu ignorieren und selbst was zusammenzuschreiben. Entprellen bedeutet ja eigentlich nichts anderes als das schnelle hin- und herspringen des log. Wertes eines Tasters zu ignorieren und den Wert erst dann zu akzeptieren, wenn er längere Zeit stabil geblieben ist. Du mußt also nur den aktuellen Zustand einlesen und ein paar Mal zu späteren Zeitpunkten damit vergleichen. Ist es immer derselbe Wert, dann kann man annehmen, daß er stabil ist. Die Parameter - wie z.B. die Anzahl der Vergleiche, die notwendig sind, oder die Größe der Intervalle, in denen "Nachverglichen" wird, kann man durch Probieren und etwas Überlegen gut bestimmen. Auf diese Weise hast Du sicherlich mehr davon, als wenn Du fertigen Code verwendest. Viel Spaß, Christoph
...sehe ich auch so. Ist nur schöner auf diesem Wege auch etwas den Programmierstil anderer zu sehen. Letztenendes ist mir das vom Ablauf ja alles klar. Nur mit der Umsetzung hapert es noch. Bin halt Anfänger.
Hier, die Routine ist noch zuverlässiger, da sie 4-fach entprellt: http://www.mikrocontroller.net/forum/read-4-20549.html#new Es ist richtig, die Routine ist für 1-8 Tasten, d.h. man muß nur die Bits auswerten, die auch wirklich mit einer Taste verbunden sind. Die anderen Bits läßt man einfach links liegen. Wenn es aber aufs Bitsparen ankommt, ist hier eine optimierte Routine für nur eine Taste, die benötigt nur die unteren 4 Bits eines Registers: http://www.mikrocontroller.net/forum/read-4-27035.html#new Peter
Also, bei dem Bitsparer komme ich auf einen Thread, wo ich nur ein C-Programm finde. Das andere Beispiel wollte ich gern mal probieren aber ich bekomme es nicht zum Laufen. Der MC zeigt keine Reaktion. Kann man eigentlich auch online (im MC) debuggen ? Ich hab ein STK500
Ok, hab ich getan. Das Proggi von Peter tuts ja nunmal nicht auf meinem 2313. Mit Deinem Code kann ich leider ohne das drumrum bis jetzt auch noch nichts tun. Ist es möglich, diesen mal vollständig zu bekommen? Bis ich die ganzen Deklarationen und den Timer mir aus der Birne gedrückt habe, bin ich wahnsinnig geworden. Ich habs zwar mittlerweile mehrfach gelesen und getippt und auch verstanden aber auswendig kann ich das noch nicht. Ich meine diesen Threat: http://www.mikrocontroller.net/forum/read-1-140056.html#140946 ****VERZWEIFLUNG !!*****
"Also, bei dem Bitsparer komme ich auf einen Thread, wo ich nur ein C-Programm finde." Also ich sehe da nur mein ASM-Programm (1wire.zip auspacken). "Das andere Beispiel wollte ich gern mal probieren aber ich bekomme es nicht zum Laufen." Du must schon etwas kooperativ sein, in den Kopf kann Dir keiner schauen. Also was hast Du probiert und was geht wie nicht. Peter
Hallo! Kannst Du auch was mit C-Code anfangen, oder akzeptieren Deine Software-Tools nur Assembler ? In C hätte ich was für Dich - also wenn Du was damit anfangen kannst, dann poste hier nochmal. Gruß Marcus
"Bis ich die ganzen Deklarationen und den Timer mir aus der Birne gedrückt habe, bin ich wahnsinnig geworden." Dann fang erstmal klein an: - Taste drücken -> LED an, Taste loslassen -> LED aus - Timer -> LED blinken usw. Die Beispiele laufen natürlich nur auf der gleiche Hardware, andere AVRs mußt Du selber anpassen. Peter
Eines vorweg: Es ist nicht mein Code, sondern der von Peter Dannegger. Ich habe ihn lediglich analysiert und umfassender kommentiert, um die von Markus gestellte Frage zu beantworten. Verstanden habe ich den Code auch erst, nachdem ich mich intensiv damit beschäftigt hatte. Und das hat schon einige Zeit gedauert. Ein komplettes Programm kann ich dir nicht liefern, da ich selbst diesen Code noch nicht in eigenen Programmen verwendet habe. Wichtig ist aber, dass du dein Programm so strukturierst, dass es von einem ständig (periodisch) laufenden Timer-Interrupt gesteuert wird. Soll heißen: Ein Timer wird so konfiguriert, dass er alle soundsoviel Prozessortakte einen Interrupt auslöst. In dieser ISR (der "Herzschlag" des Programms) werden Tasten abgefragt, Blinkzähler erhöht (oder verringert), Flags für das Hauptprogramm gesetzt usw... ...
Nun gut... ich habe get8key in mein Studio kopiert. .include "2313def.inc" angepasst. Dann hab ich das mal versucht Schrittweise zu simulieren. Irgendwann bin ich dann ausgestiegen. In main brabbelt er ja so lange rum, bis der Timer kommt. Dann springt er nach der get8key-Routine wieder zu init, was ich persönlich erstmal komisch finde - aber gut. Hier werden wieder alle Key-Variablen gelöscht ? Dann wird in main wieder der Interrup disabled, die gelöschte key_press exclusiv mit leds verknüpft und danach wieder gelöscht (halte ich für blödsinn - aber gut). Dann brabbeln wir wieder ne Weile im main rum und das ganze beginnt von neuem. Nun denn, hab ich mir gedacht - vielleicht ist der Simulationsbetrieb ja nicht geeignet zum testen. Also Board ran und auf den 2313 geschossen. Nix Reaktion. Irgendwie fehlt mir hier absolut der logische Ablauf. Wozu das Label get8key, wenn's nicht aufgerufen wird? Wieso wird immer wieder initialisiert ? Ich verstehe das nicht :-(
Unglaublich, wie einfach das Leben sein kann. Toller Tip. Und Danke an alle für Eure Mühen. So langsam dämmerts auch bei mir. Gruß Carsten
Hallo Peter, ich habe Deine Routine mal versucht in mein Programm einzubinden. Wie kann ich die im AVR-Studio simulieren ? Dein Original läuft aufm MC einwandfrei. Im Simulator bleibt key_press immer 0. TIFR muss ich setzen um den Interrupt zu erzeugen. Dann natürlich PinD. Aber er kommt nicht zu einem Ergebnis in key_press Kann man das überhaupt simulieren?
Mit dem Simulator habe ich noch nie gearbeitet. Man muß da irgendein Stimulus schreiben, mit dem dann die Eingänge gesetzt werden. Es muß ja eine Flanke erzeugt werden. Peter
Wie testest Du denn ? Kann man den Programmablauf online im MC beobachten ? Gibt's eigentlich sowas wie debug.print um Werte im Outputfenster darzustellen ?
Hallo Marcus >In C hätte ich was für Dich - also wenn Du was damit anfangen >kannst,dann poste hier nochmal. Also ich suche sowas in C, vielleicht kannst du es mir ja mal schicke! mfg mathias
"Also ich suche sowas in C" Was gefällt Dir denn an meinen C-Beispilen nicht ? 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.