hallo, habe mal eine frage, und zwar möchte ich auf meinem 16x2 Display
die Tasterzustände von 2 Tastern ausgeben. Das Lcd hängt an PortD und
Taster an PB0 und PB1.
meine main Funktion sieht bis jetzt so aus:
1
#include<avr/io.h>
2
#include"lcd-routines.h"
3
4
intmain(void)
5
{
6
DDRB=0x00;
7
8
lcd_init();
9
10
11
12
while(1)
13
{
14
}
15
16
return0;
17
}
und jetzt hab ich schon gelesen, dass man da mit
1
charb[20];
2
3
itoa(PORTA,b,10);
4
5
lcdausgabe(b);
oder so arbeiten muss, kann mir da jm vll helfen. ich möchte erst einmal
nur, dass auf dem Display entweder eine 1 für gedrückt oder eine 0 eben
für nicht gedrückt erscheint.
gruß stefan
Stefan Feismann wrote:
> und jetzt hab ich schon gelesen, dass man da mit
Fang mit dem Tutorium auf dieser Site zu lesen an.
Auch für C-Programmierer sind die ersten paar Kapitel des Assembler
Tutoriums nicht uninteressant und können zur Ergänzung des
Avr-gcc-Tutoriums gelesen werden.
> char b[20];>> itoa(PORTA,b,10);
Du willst nicht den PORTA ausgeben, sondern den PINA.
PORTA = Ausgaberegister des Ports A
PINA = Eingaberegister des Ports A
Und die 10 da hinten bei itoa, gibt die Basis des Zahlensystems an, in
dem itoa seinen String erstellen soll. Du willst binär. Also 2
Wie sind deine Taster angeschlossen?
Brauchst du die internen Pullup Widerstände oder hast du extern welche
drann?
Wenn dir die letzten beiden Rückfragen nichts sagen, dann unbedingt die
Tutorien vornehmen.
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorialhttp://www.mikrocontroller.net/articles/AVR-Tutorial
also die taster sind zwischen gnd und PB und haben dann einen 10k pullup
widerstand gegen +5V.
aber warum muss ich denn binär die zahlen auslesen.geht das dann
einfacher wenn der nur lesen muss 0b00000010 oder 0b00000001
gruß
Stefan Feismann wrote:
> aber warum muss ich denn binär die zahlen auslesen.
Das weiß ich nicht. Du hast dir die Aufgabe gestellt, die
Tasterzustände als 0 und 1 anzuzeigen und das ganze mit itoa zu machen.
(Und du musst gar nichts auslesen. Zahlen sind in einem Computer einfach
nur Zahlen, nichts weiter. Aber wenn diese Zahlen irgendwo ausgegeben
werden, muss man sich entscheiden, wie sie ausgegeben werden. Du kannst
sie dezimal ausgeben, du kannst sie hexadezimal ausgeben, du kannst sie
binär ausgeben oder du kannst sie auch in jedem beliebigen anderen
Zahlsystem ausgeben. Aber all das sind nur verschiedene Ausgabeformen
der Zahlen. Intern ist alles einfach nur eine Zahl
Das hier: + + + + + + + + +
ist eine Menge von '+'. Die hast du zb in einem Computer. Auf die
Ausgabe schreibst du jetzt zb. 9. Das wäre die Anzahl der Mengenelemente
in dezimaler Form. Du kannst aber auch schreiben 1001. Das wäre dieselbe
Zahl in binärer Form. Oder du schreibst 11 weil du ein Freak bist und
oktale Ausgabe bevorzugst. Oder du lässt auf der Anzeige +++++++++
erscheinen, oder auf der Anzeige steht
'Lisi ist im Stall'
'Erika ist im Stall'
'Lotte ist im Stall'
...
weil jedes '+' eine Kuh repräsentiert, die abends von alleine in den
Stall gegangen ist, oder ....
Das ändert aber nichts an dem was du im Computer hast, nur die Art und
weise wie du ausgibst ändert sich.
Wenns dir Spass macht und für deine Aufgabenstellung zuträglich ist,
hindert dich niemand, das so zu machen
1
if(PINB&(1<<PB0))
2
lcdausgabe("Taster 0 ist aus");
3
else
4
lcdausgabe("Taster 0 ist ein");
Viele Wege führen nach Rom und es liegt an dir den richtigen
rauszufinden, je nachdem was du auf deiner Reise sehen willst.
ja das letzte damit könnte ich anfangen.
wie geb ich denn jetzt den befehl lcdausgabe auf dem display aus.
dazu muss ich doch irgendwie einen befehl verwenden, der mir dann
1
lcdausgabe("Taster 0 ist aus");
lcdausgabe auf dem display azeigt.
kann man das mit
Stefan Feismann wrote:
Du musst den Programmtext auch lesen
1
>charBuffer[20];// in diesem {} lokal
2
>itoa(variable,Buffer,10);
3
>
4
>// ... ausgeben
5
>lcd_string(Buffer);
Da steht doch der 'Befehl' (eigentlich ist es eine Funktion), die die
Ausgabe eines Strings macht. Praktischerweise heist die Funktion dann
auch noch 'lcd_string'