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: > wie ich sage das es dann den > Text ausgibt. genauso wie du "no data" ausgibst.
Wie gibst du denn No Data aus? Den Text gibst du in einen if-Abfrage aus.
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
Dann fragst du in Assembler die Tasten ab, wenn eine gedrückt ist, dann springst du in die Textausgabe.
Den Denkweg habe ich auch, nur nicht das Wissen wie das geht. Sonst würde ich ja nicht nachfragen.
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)
Also abgewandelt etwa so:
1 | |
2 | .include "m32def.inc" |
3 | |
4 | ldi r16, 0xFF |
5 | out DDRD, r16 |
6 | |
7 | ldi r16, 0x00 |
8 | out DDRC, r16 |
9 | |
10 | loop: sbic PIND, 0 |
11 | |
12 | "Textausgabe" |
13 | rjmp loop |
14 | |
15 | "No Data" |
16 | |
17 | ende: rjmp ende ; Endlosschleife |
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? |
6 | RJMP WriteText2 ; okidoki, ist gedrückt |
7 | RJMP WriteText3 ; weder 0, noch 1 war gedrückt |
8 | RJMP loop ; an und für sich kann dieser RJMP nie |
9 | ; erreicht werden. Ich lass ihn aber trotzdem |
10 | ; damit man sieht, dass hier die Haupt- |
11 | ; schleife zu Ende ist. |
12 | |
13 | WriteText1: |
14 | .... Text 1 ausgeben ..... |
15 | RJMP loop |
16 | |
17 | WriteText2: |
18 | .... Text 2 ausgeben ..... |
19 | RJMP loop |
20 | |
21 | WriteText3: |
22 | .... Text 3 ausgeben ..... |
23 | RJMP loop |
Danke. Jetzt weiß ich wie's gemeint ist. Dann muss ich mit meinem Kollegen nochmal reden, weil das komplett anders ist wie er meinte.
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.