PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Binäranzeige im AVR-Studio?



gulliver
27.11.2006, 12:53
Hallo,

gibt es eine Möglichkeit, sich beim Simulieren mit dem A-Studio die Registerinhalte binär anzusehen? Ich habe bisher keine Einstellung dafür gefunden.
Mir geht es in diesem Fall um die Entprellroutine von Peter Dannegger, die ich versuche zu enträtseln. Diese scheint nur auf MCU's mit mehreren Ports zu funktionieren, aber nicht auf einem tiny13, also auf Prozessoren mit nur einem Port. Diese Routine braucht anscheinend einen komplett reinrassigen Eingangsport und einen getrennten Ausgangsport.
Ich habe sie auf den anderen mir zur Verfügung stehenden Chips getestet und sie lief zur besten Zufriedenheit. Auf dem tiny13 dagegen kommt nur Müll raus, vermutlich auf Grund des gemischten Ports.

Dieser Entprellung habe ich mal versucht, mit Excel auf die Schliche zu kommen, aber dies kommt mir auch etwas spanisch.
Bei der ODER-Funktion sollte bei zweimal 0 eigentlich falsch rauskommen, aber wahr wird angezeigt, obwohl eine einzelne 0 als falsch angezeigt wird. Alles andere läßt sich mit der WENN-Funktion codieren.

Hier habe ich mal mein Testproggi eingestellt. Die Fokus- und Auslösen-Geschichte im Kommentarblock am Beginn sollen nicht weiter verwirren. Dies sind Fragmente aus meinem Kameraprojekt. Den Code werde ich bei Funktionieren der Entprellung weiter ausbauen.

BBCode-Tag klappt leider nicht. Vermute mal,daß dadurch auch die Formatierungen verschwinden und es wird etwas unüberschaubar.
Darum ein Attachment.

mfg Roger

teslanikola
27.11.2006, 22:26
das mit dem Bin weis ich leider nicht, aber ich hab mal die asm überflogen, für mich ist das ne einfache Standard Entprellung, wo einfach in eine Subroutine continuierlich aufgerufen wird und dann der Tastendruck immer nur kurtz gescannt und dann gespeichert wird, sit eine gewisse anzahl an Scanns gleich, ist die Taste gedrückt / nicht gedrückt und somit entprellt. Man bruach dazu nich mal nen Timer abstellen, wenn irgend was im Code zyclisch aufgerufen wird, einfach da noch die 2-3 Zeilen code rein und fertig

gulliver
28.11.2006, 09:27
Was Code und Timer machen ist mir schon klar, aber diese Routine scheint nicht auf Ports mit Eingabe- und Ausgabepins zu funktionieren.
Um nicht für jeden Befehl die Bitmuster in den Ergebnissen aufzumalen, suche ich nach einer Möglichkeit diese Ausgaben in den Registern 0 bis 31 im Studio binär anzusehen.

Wenn meine Englischkenntnisse besser wären, würde ich mich direkt bei Support von Atmel melden und einem Wunsch nach Integration dieser Erweiterung äußern. Es wäre neben der Hexausgabe auch eine binäre Ausgabe, genauso wie weiter unten bei den Ports, Timern, ADC usw.. Dies wäre sicher ohne große Probleme integrierbar und wäre bestimmt eine große Hilfe, weil man das Bitmuster sofort überblickt.

mfg Roger

JonnyP
29.11.2006, 06:10
Was soll an den Ports nicht stimmen? Man kann sie doch als Ausgang oder als Eingang Programmieren wie alle anderen AVRs auch.

gulliver
29.11.2006, 10:47
Irgendwie fühle ich mich nicht richtig verstanden. Liegt es an der Art, wie ich mein Problem darstelle, oder überliest man den Beitrag nur sehr flüchtig? Dann kommen solche Antworten bei raus. Dies soll jetzt keine Meckerei sein, aber diesen Eindruck gewinne ich auch in vielen anderen Beiträgen.

Die Hardware und die Programmierung sind mir schon klar. Mein Problem ist sehr häufig das Verstehen der Datenblätter, da weiß ich mitunter nicht, wie manches zu deuten ist. Englisch ist ja eine sehr blumige Sprache, da erkennt man die Bedeutung eines Wortes erst im kompletten Satz. Mit einer Wort-für-Wort-Übersetzung ist einem da nicht viel geholfen, schon garnicht bei Fachliteratur mit ihren speziellen Ausdrücken, die dann womöglich auch noch abgekürzt sind. Die westdeutsche Bevölkerung hat es da wesentlich leichter. Englisch war praktisch das zweite Frühstück in der Schule.

Da mich der Arbeitsmarkt nun im zarten Alter von 50+ ausgemustert hat, werde ich jetzt wohl mehr Zeit für diese Thematik haben. Eigentlich sollten ja die Applikationen von Atmel eine gute Grundlage zum Lernen sein, aber wenn dieser Code nicht mal funktioniert und dann noch im Netz diese "hab ich zwar nicht ausprobiert, aber so könnte es funktionieren"-Geschichten, wo dann das wesentliche im Code fehlt, können einem schon in den Wahnsinn treiben. Wenn er dann nicht mal kommentiert oder nur sehr dürftig in einem miserablen denglisch, dann versteht man fast nichts davon.

Nun genug mit den Gelaber und zu meinem Problem.
Die Entprellroutine von P.Dannegger läuft sehr gut auf einem 2313 und den anderen mehrportigen, wo ich einen Port als Eingabe und den anderen zur Ausgabe nutze. Ein tiny13 hat aber nur einen Port, den ich zwangsläufig in Eingänge und Ausgänge aufteilen muß. Ohne eine Ausgabe wäre jedes Programm ein Witz. In genau dieser Konstellation scheint diese Entprellroutine nicht zu funktionieren. Da kommt bei mir nur Müll raus. Wenn darunter der gedrückte Taster wäre, könnte man ihn ja einfach ausmaskieren, aber das ist ja auch nicht der Fall.

Um der Sache auf den Grund zu gehen, habe ich mich mit dem Code auseinandergesetzt, um ihn in seiner Gesamtheit zu verstehen. Zu verstehen, was die einzelnen Befehle machen und welche Flags dabei gesetzt werden, habe ich kein Problem.
Nun ist es so, daß das Studio mir die Portinhalte der Register 0-31 nur in Hex anzeigt.

Da Peter den Code sehr schön der Reihe nach in den unteren Registern arbeiten läßt, würde man es binär sehr gut nachvollziehen können, ganz nach dem Motto, ein Bild sagt mehr als tausend Worte. Da habe ich nach einer Möglichkeit der binären Ausgabe im Studio gesucht. Dies scheint aber nicht möglich zu sein und damit hat sich diese Thema auch erledigt.

Nun habe ich die Idee, die Tasten im PinChange-Interrupt zu erfassen. In diesem Interrupt werde ich den Timer aktivieren um den Port im 10ms-Takt abzufragen.

Im PinChange-Interrupt wird ja die gedrückte Taste in PCMSK maskiert und genau diesen Eingangs-Pin werde ich während des Timerinterrupt auswerten. Ist der Pegel nach 3-5 Interrupts konstant, dann wird der entsprechende Ausgang geschaltet, der PinChange-Interrupt eingeschaltet und der Timerinterrupt wieder abgeschaltet. Nach dem reti kann dann wieder eine Taste betätigt werden.

Das wirkt dann wie ein Flipflop, aber das Tastenprellen erzeugt dann keine weiteren Interrupts, da nur der Timerinterrupt aktiv ist.

Der ganze Vorgang dürfte maximal bis zu einer halben Sekunde dauern, dann sind die Tasten wieder freigeschaltet.
Da ich den Timer für diese Anwendung sonst nicht weiter benötige, könnte das für mich ein gangbarer Weg sein.
Dies ist mir gerade während des Schreibens diese Büchlein eingefallen und werde es nach dem Futtern gleich ausprobieren.

also bis denne

Roger

Laeubi
07.12.2006, 20:48
Ein doppelklick auf die Zahl öffnet das edit Fenster in dem du als Ansicht auch Binärdarstellung wählen kannst.
Vieleicht hilft dir das?

FlatBeat
12.12.2006, 19:57
versuch mal folgendes:

nach
in tempy, PINx
andi tempy, 0bxxxxxxxx ; alle Eingangsbits auf 1, alle Ausgänge 0

und dann normal im Programm fortfahren. Durch die und-Verknüpfung mit 0 sind die Ausgangspins als 0 interpretiert, ändern sich demnach nicht.


also z.B.

PINx = 01010101
dich interessieren die letzten beiden bits

also:
; tempy ist
in tempy, PINx ; 01010101
andi tempy, 0b00000011 ; 00000001