Hallo,
ich habe ein Problem mit meiner Schaltung, bzw mit dem Programmieren.
Ich hab an D meinen Display und an C meine Taster.
Jetzt möchte ich es machen, dass wenn ich den ersten Taster drücke "Text
1" kommt, wenn ich den 2. drücke "Text 2" kommt, usw. Und wenn keiner
gedrückt ist "No Data" da steht.
Das No Data ist kein Problem, aber ich weiß nicht wie ich das machen
soll mit dem, das der Display mir Anzeigt wenn ich einen Taster drücke
(wenn ich loslasse soll dann wieder "No Data" stehen.
MfG,
Lars
Es ist ja nicht so als ob ich mir das nicht durchgelesen habe. Aber das
hilft mir mit meinem Problem auch nicht viel weiter. Mein Problem ist
nicht wie die Taster funktionieren sondern wie ich sage das es dann den
Text ausgibt.
Lars Schuch schrieb:> Es ist ja nicht so als ob ich mir das nicht durchgelesen habe. Aber das> hilft mir mit meinem Problem auch nicht viel weiter. Mein Problem ist> nicht wie die Taster funktionieren sondern wie ich sage das es dann den> Text ausgibt.
ist das jetzt eine Fangfrage?
if( Taste1 gedrückt )
schreibe Text aufs LCD
else if( Taste2 gedrückt )
schreibe anderen Text aufs LCD
else
schreibe Defaulttext aufs LCD
Das ist noch nicht der Weisheit letzter Schluss, aber es sollte dich mal
in die Gänge bringen.
In C wäre es ja einfach. Ich brauch es aber in Assembler (tut mir leid,
vergessen dazu zu schreiben)
@Hubert:
Das gebe ich aus, weil ich ja keinen Taster drücke. Also liegt keine
Information an, also No Data
Lars Schuch schrieb:> In C wäre es ja einfach. Ich brauch es aber in Assembler (tut mir leid,> vergessen dazu zu schreiben)
Es funktioniert auch in Assembler prinzipiell nicht anders.
Wenn du das
AVR-Tutorial
studierst, wirst du viele Stellen finden, in denen mit einer gedrückten
Taste etwas ausgelöst wird. Und das fängt schon beim allerersten
Tutorial-Artikel an (nach dem allgmeinen Vorgeplänkel), bei dem es darum
geht, dass mit einer gedrückten Taste eine LED eingeschaltet wird. Bei
dir ist es halt keine LED sondern ein Text aufs LCD. Aber das Prinzip
der Abfrage der Taste ist genau dasselbe.
Eigentlich ist das sogar sowas wie die Grundstufe der AVR-Assembler
Programmierung. Man beginnt damit, eine LED gezielt ein/aus schalten zu
können. Gleich danach kommt ein Taster ins Spiel, so dass man mit dem
Taster eine LED einschaltet (und beim Loslassen wieder aussschaltet).
Und mit diesen beiden Zutaten (LED + Taster) wird erst mal das Setzen,
Löschen, Abfragen von Portpins bis zur Vergasung geübt.
Es sieht ein wenig komisch aus, wenn du dich schon mit LCD beschäftigst
aber von den Basisgrundlagen keine Ahnung hast. Das hat so ein wenig was
von: Ich müsste in der Trigonometrie 2 Zahlen addieren, weiß aber nicht
wie man addiert.
Die LED's an und ausmachen ist kein Problem, das hab ich schon gemacht.
Ein Kollege hat gemeint, ich soll es mal mit dem "brne" Befehl machen.
Nur wie?
Lars Schuch schrieb:> Die LED's an und ausmachen ist kein Problem, das hab ich schon gemacht.>> Ein Kollege hat gemeint, ich soll es mal mit dem "brne" Befehl machen.> Nur wie?
Erstens findet sich zum Thema "Vergleiche" ebenfalls im AVR-Tutorial
ein Artikel. Zweitens braucht man den BRNE dazu nicht unbedingt. Du
kannst genau die gleiche Technik benutzen, wie sie auch beim
Zusammenspiel von LED und Taster benutzt wird: die 'Bitabfrage und
Überspring' Befehle SBIS und SBIC. Womit wir wieder beim ersten
Programmierartikel im AVR-Tutorial wären.
Steht alles im AVR-Tutorial. Nur Lesen musst du selber.
Und falls du es nicht gemerkt hast. Ich verlinke dir ständig das
AVR-Tutorial und würde es sehr begrüssen, wenn du endlich mal
draufklickst und dort beim ersten Kapitel (Irgendwas mit I/O, den
genauen Titel weiß ich nicht auswendig) endlich mal zu lesen anfangen
würdest.
Ich habs doch gelesen, aber nicht verstanden. Also suche ich jetzt
hilfe. Und was wird mir gesagt. Ich soll lesen...
Und zu dem wegen verlinken sag ich nichts. Weil ich ja nicht ganz so
dumm bin wie du vielleicht denkst.
Lars Schuch schrieb:> Ich habs doch gelesen, aber nicht verstanden.
Was hast du nicht verstanden?
Das man mit
SBIS PIND, 4
das Bit 4 vom Eingangsport PIND abfrägt und wenn dieses auf 1 ist, dann
wird der nächste Befehl im Programm übersprungen? (Der nächste Befehl
könnte zb sein: Springe zu einer STelle im Programm an der "Test1" aufs
LCD ausgegeben wird.
Was ist daran nicht zu verstehen?
(Die Frage ist ernst gemein. Denn wenn sich dein Nichtverstehen als ein
grundsätzliches Problem herausstellt, dann muss man darüber nachdenken,
ob im Tutorial an dieser Stelle nicht Information fehlt)
Lars Schuch schrieb:> Also abgewandelt etwa so:>> .include "m32def.inc">> ldi r16, 0xFF> out DDRD, r16>> ldi r16, 0x00> out DDRC, r16>> loop: sbic PIND, 0>> "Textausgabe"> rjmp loop>> "No Data"
Nein.
Mit dem SBIC kannst du nur EINEN Befehl überspringen lassen. Und die
Textausgabe selber wirst du nicht in EINEM Befehl unterbringen.
Aber es schreibt dir ja niemand vor WELCHER Befehl es ist, der
übersprungen werden soll. Das kann ja auch ein RJMP sein, der zu einer
STelle im Programm springt, an der dann die Textausgabe gemacht wird und
von wo es dann wieder in einem Sprung zurück zur Hauptschleife geht.
Ich geh mal davon aus, dass deine Taster standardmässig angeschlossen
sind: Ist der Taster nicht gedrückt, dann ist der Pin auf 1. Ist er
gedrückt, dann ist der Pin auf 0. Wenn das nicht so ist, dann eben nicht
SBIS sondern SBIC. Ich nehme weiters an, dass deine beiden Taster an
PINC die Bits 0 und 1 sind)
Damit schreibt sich die Logik schon fast von alleine
1
.....
2
3
loop: SBIS PINC, 0 ; Taste 0 gedrückt ?
4
RJMP WriteText1 ; ja: ersten Text ausgeben
5
SBIS PINC, 1 ; 0 war nicht gedrückt, was ist mit Pin 1?
Eine eigene Frage?
Dieser Thread ist über 14 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.