mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bekomme Simple LCD anst. nicht hin


Autor: O. L. (revil77)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.
Trotz Suche fand ich in keinem eurer Threads die Lösung zu meinem 
Problem. Hoffe ihr könnt mir hier weiter helfen:

Ich will ein HD44780 LCD (P.Fleury lib ;) ) so ansteuern, dass es bei 
bestimmten Pin zuständen, einen bestimmten Text ausgibt.
#include <avr/io.h>
#include <util/delay.h>
#include "lcd.h"

void outp(char d);

int main(void)
{
  char x;
  DDRC=0x00;
  DDRB=0xff;
  
  lcd_init(LCD_DISP_ON);
  lcd_puts("~~~ POWER ON ~~~");    
  lcd_gotoxy(0,1);  
  lcd_puts("~~~~~~~~~~~~~~~~");
  _delay_ms(2000);
  while(1)
  {
    PORTB=0x01;  //Status LED
    x=0;                   // x rücksetzen
    if(PINC & (1<<PINC0))  //PINC0 high
      x=1;
    if(PINC & (1<<PINC1))  //PINC1 high
      x=2;
    if(PINC & (1<<PINC2))  //PINC2 high
      x=3;
    _delay_ms(30);  //entplellung??
      outp(x);
    _delay_ms(100); //Anzeigedauer
  }
  return 0;
}

void outp(char d)
{
  switch(d)
  {
    case 1:
      lcd_gotoxy(0,0);
      lcd_puts("~~~~ Reset ~~~~ ");
      lcd_gotoxy(0,1);
      lcd_puts("~~~~~~~~~~~~~~~~");
    break;

    case 2:
      lcd_gotoxy(0,0);
      lcd_puts("Heutiges Datum: ");
      lcd_gotoxy(0,1);
      lcd_puts(" So  14.02.2010 ");
    break;

    case 3:
      lcd_gotoxy(0,0);
      lcd_puts("Text 1 *********");
      lcd_gotoxy(0,1);
      lcd_puts("Text 2 *********");
    break;

    default:
      lcd_gotoxy(0,0);
      lcd_puts("!!!!! Fail !!!!!");
      lcd_gotoxy(0,1);
      lcd_puts(" ERROR !! ERROR ");
    break;
  }
}

Das POWER ON zeigt er noch ordnungsgemäß an, der nachfolgende ist zwar 
einer meiner CASEes (meistens case 2") allerdings zeigt er das immer an, 
also vollig unabhängig davon ob oder wo ich meinem Taster betätige.

Da "POWER ON" funzt, kann es eig nur am Prog liegen, aber wo..?
ich mein Pins fragt man ja mit
if(PINC & (1<<PINC0))
 ab oder?

Achja, mein Taster ist im Mom ein Kabel(+5V) welches ich an den 
betreffenden Pin hänge.

Und ExtInt verwende ich nicht da ich PORTD verwenden MUSS.

Dankbar für jede hilfe,
Olli

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

O. L. schrieb:
> Hallo.
> Trotz Suche fand ich in keinem eurer Threads die Lösung zu meinem
> Problem. Hoffe ihr könnt mir hier weiter helfen:
>...
> Achja, mein Taster ist im Mom ein Kabel(+5V) welches ich an den
> betreffenden Pin hänge.

Ja, ich habe für Dich gesucht...
http://www.mikrocontroller.net/articles/AVR-Tutori...

Gruß aus Berlin
Michael

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>  entplellung??
voll klass ey  ;-)

> Achja, mein Taster ist im Mom ein Kabel(+5V) welches ich an den
> betreffenden Pin hänge.
Offene uC-Eingangspins haben i.A. keinen zuverlässigen und definierten 
Zustand. Du solltest den Pullup des Pins einschalten und dann den Taster 
gegen GND verdrahten. Also low = betätigt, high = unbetätigt.

Autor: O. L. (revil77)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Michael
Hilft mir nicht wirklich weiter (Pullab hin oder her ;D ).
Das LCD zeigt immer nur den case3 text an, auch wenn kein Pin 
angesprochen wird (x=0).

Autor: O. L. (revil77)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Lothar
Hab jetzt die Internen Pullups ankiviert
DDRC=0x00; PORTC |= ( 1 << PC0 )|( 1 << PC1 )|( 1 << PC2 );
dennoch hab am LCD immer einen undef. case text an, auch wenn ich x=0 
hab zeigt er nicht den default case, sondern iein anderen an.

Weiß echt nicht mehr weiter...

Autor: L. J. (luke1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also, wenn beispielsweise an PINC0 eine 1 anliegt sollte das Display ja 
was anderes anzeigen oder? So habe ich das jetzt verstanden. Wenn das so 
ist mein ich, dass die Abfrage auf dem ersten Blick richtig ist. Nur 
frag ich mich, ob du das wirklich so gemacht hast, oder aber ob du gegen 
masse schaltest, weil sonst noch ein ! vor(1<<PINC0) kommt. Das musst du 
jetzt mal nachschauen.

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

O. L. schrieb:
> @Michael
> Hilft mir nicht wirklich weiter (Pullab hin oder her ;D ).
> Das LCD zeigt immer nur den case3 text an, auch wenn kein Pin
> angesprochen wird (x=0).

Ausführlicher?

1. offene Eingänge an einem CMOS-IC (der AVR ist einer) nehmen nach Lust 
und Laune jeden Zustand an weil sie sehr hochohmig sind.
Ob Du PullUp- oder PullDown-Widerstände brauchst, hängt davon ab, 
welchen Ruhepegel Du bei nicht gedrückter Taste haben willst.
H-Pegel -> PullUp, L-Pegel -> PullDown.
Da die AVR interne PullUp-Widerstände haben, werden von den meisten 
Leuten diese benutzt (Ruhepegel H) und die Tasten gegen GND geschaltet.
Natürlich muß die Software das dann auch so behandeln, also Test, ob Pin 
auf L wenn Taste gedrückt.

Dein Programm habe ich mir nicht weiter angeschaut, einfach deshalb, 
weil es wenig Sinn macht, an der Software zu basteln, bevor die Hardware 
eindeutige Zustände liefert, die das Programm dann sinnvoll auswerten 
kann...

Gruß aus Berlin
Michael

Autor: L. J. (luke1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, wenn du schon die Pullups aktiviert hast, kannst du mit dem Taster 
ja nur gegen Masse schalten, da der Ruhepegel schließlich 1 ist. Lässt 
du deine Software so wie sie ist trifft jedes case ja zu, da du den 
Eingang auf 1 abfragst und nicht auf 0.

Autor: O. L. (revil77)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nach langer Fehlersuche hab ich die Ursache gefunden... PORTC ist im 
Ar*ch!
Hab ca 7 Atmega32 herumliegen und hab genau den erwischt, der opfer 
eines Kurzschlusses wurde (fiel mir damals nicht auf, da PORTB 
einwandrei funzt).

Also hab ich den µC getauscht und siehe da... ES LEEEBT

Danke für eure Hilfe (besonders der Pullup-Ratschlag !!!)
euer
Olli

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HI

>Nach langer Fehlersuche hab ich die Ursache gefunden... PORTC ist im
>Ar*ch!

Oder JTAG-Fuse eingeschaltet.

MfG Spess

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.