Pin abfrage geht nicht

Gast #2436124
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
}

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