Problem mit dem einlesen bei AtMega128

OP (Firma: TGM) #1601280
Hi!

Ich habe folgendes Problem:
Ich besitze ein ATMega128 testboard von Ribu und dieses hat ja am PortD 
4 Taster ausgeführt. Diese möchte ich jetzt zum testen einlesen, bzw. 
wenn sie gedrückt sind 4,5, etc ausgeben. Eigentlich ist ja das Programm 
relativ simpel, aber dennoch funktioniert es nicht.

Hier mal die Funktion zum einlesen:
1
void einlesen()
2
{  
3
  DDRD=0x00;
4
  int s=0;
5
  lcd_clrscr();
6
    lcd_puts("Bitte folgende  \n");
7
     lcd_puts("Waerte eingeben:");
8
  delayms(7000);
9
  lcd_clrscr();    
10
    lcd_command(0x0F);  //Cursor blinkend ein
11
    lcd_puts("Laenge von X:");
12
  lcd_gotoxy(7,1);
13
  delayms(1000);
14
  while(s!=0)
15
  {
16
  switch(PIND)
17
  {
18
    case 0x01:
19
      laengex[0]=0; lcd_putc('0'); s=1;
20
      break;
21
    case 0x02:
22
      laengex[0]=1; lcd_putc('1'); s=1;
23
      break;
24
    case 0x04:
25
      laengex[0]=2; lcd_putc('2'); s=1;
26
      break;
27
    case 0x08:
28
      laengex[0]=3; lcd_putc('3'); s=1;
29
      break;
30
    case 0x10:
31
      laengex[0]=4; lcd_putc('4'); s=1;
32
      break;
33
    case 0x20:
34
      laengex[0]=5; lcd_putc('5'); s=1;
35
      break;
36
    case 0x40:
37
      laengex[0]=6; lcd_putc('6'); s=1;
38
      break;
39
    case 0x80:
40
      laengex[0]=7; lcd_putc('7'); s=1;
41
      break;
42

43
  }
44
  }
45

46
}

laengex hab ich global als integer definiert. natürlich als array.

Bitte um schnelle Hilfe.

Danke schon mal im Voraus!

Lg Oliver
Gast #1601290
Wohin schalten die Taster ? Nach VCC ? Oder eher nach GND ? Wenn 
Letzteres, dann an's Einschalten der PUps gedacht ?

Wenn gewartet werden soll, bis eine Taste gedrückt ist, wäre bei der 
Logik hier eher while(s==0) angebracht.
OP (Firma: TGM) #1601298
MWS schrieb:
> Wohin schalten die Taster ? Nach VCC ? Oder eher nach GND ? Wenn
> Letzteres, dann an's Einschalten der PUps gedacht ?
>
> Wenn gewartet werden soll, bis eine Taste gedrückt ist, wäre bei der
> Logik hier eher while(s==0) angebracht.

Auf VCC.

Sry, peinlich! Da hab ich mich vertippt gehabt.

Vielen dank für die schnelle Antwort!

Aber jetzt hab ich folgendes Problem, auf den Pins 0-3 hängt ein 
Optokoppler wobei am Eingang null anliegt, was auch eine LED davor 
nochmal bestätigt. Nur wenn ich in der Case Anweisung nicht maskier mit 
&0xF0, dann gibt mir mein LCD 2 aus, was ja bedeutet, dass am PD1 HIGH 
anliegt.
Weis du da vl auch eine Lösung?

Danke nochmal!

Lg oliver
Gast #1601319
Ein Optokoppler an vier Ports ? Oder eher an PD1 ? Wenn der klassisch 
geschaltet ist, mit Emitter nach GND und Widerstand von Collector nach 
VCC, dann ergibt das im ausgeschalteten Zustand einen High-Level.
Maskieren würde Sinn machen, denn wenn auf den Optokoppler reagiert 
werden soll, so stört/blockiert der dann natürlich die Tasterabfrage.
OP (Firma: TGM) #1601324
Das Problem hab ich schon selber gefunden. Der PD2 hängt am MAX232 für 
die RS232. Das heißt ganz einfach ich sollte ihn auslassen. Jetzt muss 
ich anfangen zum Pin sparen :-( gg


Aber echt vielen Dank für die schnellen Hilfen immer. Tut mir leid, dass 
es so blöde Fehler waren.
Ist hier echt ein super Forum.

Lg

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.