Problem mit dem einlesen bei AtMega128

OP (Firma: TGM) #1601280
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren