Forum: Mikrocontroller und Digitale Elektronik Pin abfrage geht nicht


von John (Gast)


Lesenswert?

Hallo

das ganze soll bei nem Mega32 eine Tasterturmatrix auslesen aber schon 
die einfache Pinabfrage über 1 Taste geht nicht!!

PINB2-4 Spalten
PINC2-5 Zeilen

Aktuell ist die Zeile 1 (PINC2) active und wenn dedrückt soll der PortB1 
da ganze auslesen (high sein) ! Stimmt was mit den Pull Up Einstellungen 
nicht.
Messe wunderbar 5V an PB1 wenn gedrückt und 0 V wenn nicht...
1
#define   F_CPU 1000000UL          // MP-Takt
2
#include  <avr/io.h>
3
#include  <stdio.h>
4
#include  <stdlib.h>
5
#include   <inttypes.h>
6
#include   <avr/interrupt.h>
7
#include   <avr/wdt.h>
8
#include    <util/delay.h>
9
10
#define BAUD     1200UL
11
#define UBRR_BAUD  ((F_CPU)/(16*(BAUD))-1)
12
13
int uart_putc(unsigned char c)
14
{
15
  while (!(UCSRA & (1<<UDRE)));
16
17
  UDR = c;
18
  return 0;
19
}
20
int uart_puts( char* str )
21
{
22
  while( *str )
23
    uart_putc( *str++ );
24
    while (!(UCSRA & (1<<UDRE)));
25
26
    UDR = 0x0A;
27
  return 0;
28
}
29
30
void long_delay(void);
31
    
32
int main(void)
33
{
34
35
// Eingang (Spalten)  
36
  DDRB  = 0x00;
37
  PORTB = 0x00;
38
39
// Ausgang (Zeilen)
40
  DDRC  = 0xFF;
41
  PORTC = 0xFF;
42
43
// RS232 aktivieren  
44
  UCSRB   |= (1 << TXEN) | ( 1 << RXEN ) | ( 1 << RXCIE ) ;          // UART TX, RX einschalten
45
   UCSRC   |= ( 1 << URSEL ) | ( 1<<UCSZ1 ) | ( 1<<UCSZ0);           // Asynchron 8N1,
46
    UBRRL  = (uint8_t) UBRR_BAUD;
47
48
  sei();   
49
  uart_puts("Start : ");
50
  while (1)
51
  {
52
    // Prüfe Zeile 1 ( 1 2 3)
53
    PORTC = (1<<PC2);
54
55
    if (PINB & (1<<PINB1))
56
    {
57
      _delay_ms(100);
58
      if (PINB & (1<<PINB1))
59
      {
60
        _delay_ms(100);
61
        if (PINB & (1<<PINB1))
62
        {
63
          uart_puts("  pressed");
64
        }
65
      }
66
    }
67
    else
68
    {
69
      uart_puts("not pressed");
70
    }
71
    long_delay();
72
    PORTC=0x00;
73
  }      
74
}
75
76
  
77
void long_delay(void)
78
{
79
       _delay_ms(200);
80
       _delay_ms(200);
81
       _delay_ms(200);
82
       _delay_ms(200);
83
}

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

> Stimmt was mit den Pull Up Einstellungen nicht.

Wenn das eine Frage sein soll, müßtest du ein Fragezeichen ans Satzende 
stellen.

von John (Gast)


Lesenswert?

Hallo

ja das ist die Frage bzw. allg. warum es nicht funktioniert oder wo der 
Denkfehler ist.... Ich habe schon alles umgestellt aber finde nichts...

von Stefan E. (sternst)


Lesenswert?

1
    PORTC = (1<<PC2);
2
3
    if (PINB & (1<<PINB1))
Zwischen diese beiden Zeilen muss ein NOP.

von Stefan E. (sternst)


Lesenswert?

Und vom fehlenden NOP mal abgesehen, wenn du mit Pull-Ups arbeiten 
willst (die aber gar nicht aktiviert sind), ist doch deine ganze Logik 
verkehrt herum. Du musst dann 0 ausgeben und auch auf 0 testen.

von John (Gast)


Lesenswert?

Besten Dank das wars!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.