www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik [C] PIND Auslesen und auf Display ausgeben.


Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich möchte den Dezimal Wert der PORTD an ein LCD Senden...

Ich mache das in meinem Prog so:
void send_int(int *zahl){
       char Buffer[20];          //umwandlung von Dezimal in ASCII
       itoa(zahl, Buffer, 10 ); 
     
       lcd_string(Buffer);
    }



int main(void){

    lcd_init();
  DDRD = 0;
  
  
 while(1)
    { 
  set_cursor(0,1);
  send_int(PIND);
    }
}

Wenn ich nun zb. Taster 0 Drücke, dan steht auf dem Display 254
wenn ich Taster 1 Drücke steht 253
wenn ich Taster 1 und 0 Drücke so steht 252

Also alles ok

wenn ich taster 7 Drücke, steht 127
wenn ich taster 6 drücke steht 191
wenn ich jedoch taster 7 und 6 drücke, steht 637

woher kommt das?

Danke schonmal

Autor: hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da steht 63 und das Stimmt auch!!

Die 7 ist wohl vom schreiben davor stehengeblieben (127).

Ausgabe anpassen und fertig.

Gruß hans

Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achjaaaaaaaaaaa

hab ich total vergessen :D

Hmmm.... wie krieg ich den nun die nachfolgenden zeichen gelöscht?

Ich bin noch anfänger in c... sorry

das sowas lcd_sting("         "); gehen würde weis ich schon
aber das erschein mir etwas unsauber....

Autor: fubu1000 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo mal wieder Claudio,
also ich wette mal du drückst taster 7 und 127 erscheint auf dem 
Display.
danach drückst Taster 6 und 7. Da sollte dann nach deiner 
Anschlussbelegung natürlich 63 erscheinen.
Das Problem ist nur du setzt den Cursor immer auf erstes Zeichen und da 
127 drei Zeichen hat und 63 nur zwei wird von der 127 nur 1 und 2 
überschrieben und die 7 bleibt stehen. Ergebnis = 63 von Taster 6 und 7 
und die 7 von der 127. Also alles Ok.

MAch also am besten bei sowas lcd_clear(); statt set_cursor.

Gruss

Autor: hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einfach den Buffer vorher löschen!

       char Buffer[20]={"                    "};

statt  char Buffer[20];

sollte gehen

gruß hans

Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antworten....

letztere Funktioniert leider nicht :(

Autor: fubu1000 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HAst du denn schon lcd_clear(); probiert ???
DAs sollte gehen, wenn nicht lcd_clear() und set_cursor(0,1);

GRuss

Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi....

ja hab ich probiert....

Das problem ist, wenn ich lcd_clear() in der while(1) schleife
ausführe, dann sieht man nix mehr auf dem display.....

also müsst ich bei Stellen wechsel clear nur einmal ausführen
doch bevor ich mir den kopf zerbrochen habe wie man das machen könnte,
hab ich gedacht ich warte ab ob es noch ne andere lösung gibt

Autor: fubu1000 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
while(1)
  {
  if(PIND != 0xFF)
  {
     _delay_ms(500);    //billig entprellung der tasten, besser mit 
Timer
     lcd_clear();
     send_int(PIND);
   }
  }

Autor: fubu1000 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Funktioniert natürlich nur wenn vom PORTD alle Pins auf High liegen.
Ansonsten musste natürlich das if(PIND != 0xFF) anpassen.

GRuss

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.