Hi,
ich habe hier ein kleines Programm, das einfach nur mit einem Taster
einen Ausgang toggeln soll. Das ist meine erste ASM Übung auf dem
Tiny10.
Leider tut sich nichts. Die LED am Ausgang (über 1k an PB2) bleibt immer
an. (Übersetzt mit avra)
Andreas B. schrieb:> Das ist meine erste ASM Übung auf dem> Tiny10.> Leider tut sich nichts. Die LED am Ausgang (über 1k an PB2) bleibt immer> an. (Übersetzt mit avra)> Hat jemand eine Idee, was hier falsch läuft?
Wie wärs wenn du erst mal mit etwas wesentlich einfacherem anfangen
würdest?
Damit dieser Code das tut, was du beabsichtigst, müssen schon mal viele
Dinge stimmen. Genau das mündet gerade bei Neulingen, die naturgemäss
keine Erfahrung haben, regelmässig darin, dass eben nichts funktioniert.
Seine ersten Schritte macht man nicht beim New-York Marathon, sondern
indem man von der Mama zum Sofa 'balanziert'. Und genau dasselbe gilt
auch in der Programmierung. Seine ersten Schritte und die ersten
Erfahrungen sammelt man nicht mit Programmen, bei denen 78
Detailprobleme korrekt gelöst werden müssen, sondern indem man eine LED
einschaltet. LED ausschaltet. LED blinken lässt. sontige LED Spielchen.
Und erst dann kommen erst mal Taster auf die Bildfläche. Wobei man auch
nicht gleich mit der Erkennung eines Tastendrucks anfängt, sondern zb
eine LED bei gedrücktem Taster leuchten und bei nicht gedrücktem Taster
nicht leuchten lässt. Lezteres ist nämlich deutlich einfacher als eine
Tasten-Flankenerkennung und Entprellung.
Karl Heinz schrieb:> Wie wärs wenn du erst mal mit etwas wesentlich einfacherem anfangen> würdest?
Das hat dann auch den Vorteil, dass man ein so simples Programm hat,
dass man sich leicht davon überzeugen kann, dass er korrekt ist. Was
insofern wichtig ist, als man damit dann auch Fehler in der Toolchain
bzw. in der Hardware detektieren kann. Denn gerade beim allerersten
Programm steht ja auch noch die spannende Frage im Raum: Funktionieren
meine Tools überhaupt, die das Programm in den µC übertragen? Läuft der
µC überhaupt?
Technische Systeme nimmt man schrittweise in Betrieb. Die Idee dahinter
ist es, möglichst wenig potentielle Fehlermöglichkeiten zu haben.
Funktionierts nicht, dann hat man daher auch nur wenige Dinge, die man
überprüfen muss. Je mehr mögliche Fehlerquellen es gibt, desto
schwieriger ist es auch, auszusortieren welcher Fehler eigentlich das
Funktionieren verhindert. Systematisches Vorgehen ist das A und O in der
Technik.
Hi
> Clock source 128kHz>ldi rTEMP, 1<<CS02 | 1<<CS00 ; divide by 1024 * 256
Falls ich mich nicht verrechnet habe, macht das einen Overflowinterrupt
in 524,30 s.
MfG Spess
Karl Heinz schrieb:> Wie wärs wenn du erst mal mit etwas wesentlich einfacherem anfangen> würdest?
Na ja, die Entprellung ist von Peda. Die sollte ja so funktionieren.
Ansonsten ist das Programm ja nicht allzu kompliziert. Ich mache da wohl
irgendeinen ziemlich blöden Denkfehler. Mit größeren AVR Controllern in
C habe ich ja schon einiges erfolgreich programmiert. "Nur" ASM und
Tiny10 ist neu.
Aber Du hast recht. Ich sollte mal einfach mal den Eingang abfragen und
danach die LED schalten. Dann kommt vielleicht die Erleuchtung.
Spess: Sorry, der Kommentar war Mist. Der Teiler ist 1024.
Somit sollte bei 128Khz Takt ein Clock von 125Hz ergeben.
Gruß
Andreas
Hi
>Spess: Sorry, der Kommentar war Mist. Der Teiler ist 1024.>Somit sollte bei 128Khz Takt ein Clock von 125Hz ergeben.
Nein. Das ist ein 16-Bit-Timer. Der Overflow kommt nach
1024*65536/128000s = *524,272*s. Damit wird ein Tastendruck nach ca.
2100s festgestellt.
MfG Spess
Hallo!
Andreas B. schrieb:> ldi rTemp, 1<<PB0 | 1<<PB1> out PORTB, rTEMP ; Pullup an PB0 und PB1
Diese beiden Zeilen bleiben beim ATtiny10 ohne Wirkung.
Der kleine Floh ist in mancher Hinsicht recht modern: er besitzt ein
eigenes Register für die Pullups: PUEB. Also:
spess53 schrieb:>> Nein. Das ist ein 16-Bit-Timer. Der Overflow kommt nach>
Du hast Recht. Irgendwie gehe ich davon aus, daß Timer 0 immer ein 8-Bit
Timer ist.
Ziegenpeter schrieb:> müsste das nichtin key_old, PINB heissen
Aua, da muß ich mich irgendwie vertippt haben.
Markus Weber schrieb:> Der kleine Floh ist in mancher Hinsicht recht modern: er besitzt ein> eigenes Register für die Pullups: PUEB. Also:> ldi rTemp, 1<<PUEB0 | 1<<PUEB1> out PUEB, rTEMP ; Pullup an PB0 und PB1
Das war mir völlig neu.
Danke an alle!
Ich werde jetzt doch mal schrittweise drangehen wie Karl-Heinz empfohlen
hatte. Bei den Tiny10 und ASM gibt es doch mehr Fallen, als ich gedacht
habe. Das Datenblatt überfliegen, reicht hier offensichtlich nicht. Da
ist doch einiges anders als bei den großen AVRs.
Gruß
Andreas
Hallo,
für die Nachwelt noch die überarbeitete Version. Ich hatte auch noch
einige Logikfehler drin.
Es handelt sich hier schlicht um einen entprellten Taster mit Flipflop
Funktion.
Die ganze Maskiererei ist so nicht unbedingt notwendig. Ich habe es
trotzdem so gemacht, um Seiteneffekte auszuschließen,falls noch
Erweiterungen hinzukommen sollten.
Interessant finde ich bei diesem Tiny daß man mit aktivierten Pullup den
OUT auf 0 setzen kann. Eine schöne Möglichkeit, die Batterie leer zu
machen. ;-)
Danke für das Update! :-)
Andreas B. schrieb:> Interessant finde ich bei diesem Tiny daß man mit aktivierten Pullup den> OUT auf 0 setzen kann. Eine schöne Möglichkeit, die Batterie leer zu> machen. ;-)
Geht das wirklich? Also, ist der Pullup dann wirklich auch dann aktiv,
wenn das Pin auf Ausgang geschaltet ist? Ich hab das nie getestet, wär
aber irgendwie lustig. :-) Der zusätzliche Stromverbrauch hält sich
allerdings in Grenzen, dürften zwischen 100 und 200 µA je Pin sein.
Sinn des PUEB-Registers ist eigentlich, das Umschalten von Eingang mit
Pullup und Ausgang 0 V in einem Takt zu ermöglichen. Das geht mit der
älteren Architektur nämlich nicht.
Markus Weber schrieb:> Geht das wirklich? Also, ist der Pullup dann wirklich auch dann aktiv,> wenn das Pin auf Ausgang geschaltet ist?
Auch der ATtiny841 hat diese neue Portstruktur mit separater
Pullup-Steuerung. Klar, braucht Strom wenn man das am Ausgang macht.
Aber das tut auch ein externes Signal, dass einen mit Pullup versehenen
Eingang runterzieht.
Ist halt einfach nur anders als gewohnt und macht Anpassungen bei
Portierung erforderlich.
Markus Weber schrieb:> Geht das wirklich? Also, ist der Pullup dann wirklich auch dann aktiv,> wenn das Pin auf Ausgang geschaltet ist?
Ich habe es nicht getestet, aber im Datenblatt wird davor gewarnt. (not
recommended). Steht auf Seite 42 (jetzt im Ernst. ;-)
Wenn man 10k für den Pullup rechnet, sollten es eher 300 µA sein.
Gruß
Andreas
Andreas B. schrieb:> Wenn man 10k für den Pullup rechnet, sollten es eher 300 µA sein.
20-50K.
> aber im Datenblatt wird davor gewarnt
Würde das nicht so sehr als Warnung denn als Hinweis betrachten. Kostet
halt Strom, aber das wars auch.