mikrocontroller.net

Forum: Compiler & IDEs Tasterzustände auf lcd ausgeben (atmega8, 16x4)


Autor: Stefan F. (feissy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
#include <avr/io.h>
#include "lcd-routines.h"
 
int main(void)
{
    DDRB=0x00;

    lcd_init();
 

 
    while(1)
    {
    }
 
    return 0;
}

und jetzt hab ich schon gelesen, dass man da mit

    char b[20];

    itoa(PORTA,b,10); 

    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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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-Tutorial
http://www.mikrocontroller.net/articles/AVR-Tutorial

Autor: Stefan F. (feissy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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ß

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
  if( PINB & ( 1 << PB0 ) )
    lcdausgabe( "Taster 0 ist aus" );
  else
    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.

Autor: Stefan F. (feissy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

lcdausgabe( "Taster 0 ist aus" );


lcdausgabe auf dem display azeigt.
kann man das mit

lcd_print(1,0,"lcdausgabe");


machen ???
gruß

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, denn dann würde ja auf dem Display "lcdausgabe" als Text stehen, 
du möchstest aber doch "Taster 0 ist aus" dort stehen haben.

Autor: Stefan F. (feissy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja genau und mit welchem befehl kann ich das realisieren???
oder muss ich das "lcdausgang" erst als variable speichern, die ich dann 
abrufe?


gruß

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wäre es, wenn du erst einmal folgendes Tutorial durchliest:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
Da steht alles zur LCD Ausgabe und Tastern drin.

Autor: Stefan F. (feissy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja genau das hab ich bereits gemacht dazu steht im tut ja folgedner code

#include <avr/io.h>
#include <stdlib.h>
#include "lcd-routines.h"
 
// Beispiel
int variable = 42;
 
int main(void)
{
    lcd_init();
 
    // Ausgabe des Zeichens dessen ASCII-Code gleich dem Variablenwert ist
    // (Im Beispiel entspricht der ASCII-Code 42 dem Zeichen *)
    // http://www.code-knacker.de/ascii.htm
    lcd_data(variable);
 
    set_cursor(0,2);
 
    // Ausgabe der Variable als Text in dezimaler Schreibweise
    {
       // ... umwandeln siehe FAQ Artikel bei www.mikrocontroller.net
       // WinAVR hat eine itoa()-Funktion, das erfordert obiges #include <stdlib.h>
       char Buffer[20]; // in diesem {} lokal
       itoa( variable, Buffer, 10 ); 
 
       // ... ausgeben  
       lcd_string( Buffer );
    }
 
    while(1)
    {
    }
 
    return 0;
}


aber damit komm ich nicht klar deswegen die fragen sry

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan Feismann wrote:

Du musst den Programmtext auch lesen
>        char Buffer[20]; // in diesem {} lokal
>        itoa( variable, Buffer, 10 );
> 
>        // ... ausgeben
>        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'

Autor: Stefan F. (feissy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
achso ist das da gemeit ich war schon die ganze zeit am überlegen.
also muss das heißen
       char Buffer[20]; // in diesem {} lokal
       itoa( PINA, Buffer, 2 ); 

       // ... ausgeben  
       lcd_string( Buffer );




Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.