PB4 am atmega32 will nicht

Gast #3539327
Lesenswert?

Hallo,

ich habe ein (vermutliches kleines) Problem und ich hoffe ihr könnte mir 
helfen, bzw. einen Denkanstoss geben.

Ich habe hier eine Matrix aus mehreren Tastern die ich abfragen möchte, 
es wird auch alles soweit korrekt erkannt, außer bei PB4, hier wird kein 
Signal erkannt.

Ich nutze kein SPI oder der gleichen, womit könnte dies zusammen hängen?

// Eingänge definieren
  DDRB &= ~( (1<<PB0) | (1<<PB1) | (1<<PB2) | (1<<PB3) | (1<<PB4) );

// PullUps aktivieren
  PORTB |= ( (1<<PB0) | (1<<PB1) | (1<<PB2) | (1<<PB3) | (1<<PB4) );

Mehr ist doch nicht nötig oder? Zumal ja wie gesagt die anderen Portpins 
funktionieren.
#3539347
Lesenswert?

Sebastian schrieb:

> Mehr ist doch nicht nötig oder?

Doch.
Es gibt noch zig andere Möglichkeiten, was du in deinem restlichen 
Programm noch alles angestellt haben könntest. Zb. könntest du dir 
irgendwo unabsichtlich die Pullups abgeschaltet haben. Und das ist jetzt 
nur ein erstes mögliches Problem, welches mir als Möglichkeit spontan 
einfällt.


Also: poste dein komplettes Programm. Ist mir sowieso immer 
unverständlich, warum da immer so eine Geheimniskrämerei drum gemacht 
wird und man immer erst nachfragen muss. Im Zweifel: poste zu viel als 
zu wenig.
Gast #3539363
Lesenswert?

So hier mal alles komplett :)
Ich weiß es ist nichts entprellt oder der gleichen.
1
#define F_CPU 8000000L
2
#include <avr/interrupt.h>  //dient zur Behandlung der Interrupts
3
#include <stdint.h>       //definiert den Datentyp uint8_t    
4
#include <stdlib.h>         //nötig für Zahlumwandlung mit itoa
5
#include <util/delay.h>
6
#include "uart.h"      //UART Lib
7
#include "i2cmaster.h"    //i2c Lib
8

9
#define BAUD 9600       //Baudrate
10

11
void uart_puti_dec( const int val )
12
{
13
    char buffer[8];
14
    uart_puts( itoa(val, buffer, 10) );
15

16
}
17

18

19

20
int main(void)
21
{
22
  
23
  uart_init((UART_BAUD_SELECT((BAUD),F_CPU)));
24
        sei();
25

26
  uint8_t c;
27
  uint8_t hit_val;
28
  DDRA = 0xFF;
29

30
  // Eingänge definieren
31
  DDRC &= ~( (1<<PC2) | (1<<PC3) | (1<<PC4) | (1<<PC5) | (1<<PC6) | (1<<PC7) );
32
  DDRB &= ~( (1<<PB0) | (1<<PB1) | (1<<PB2) | (1<<PB3) | (1<<PB4) );
33
  DDRD &= ~( (1<<PD5) | (1<<PD6) | (1<<PD7) );
34
  
35
  // PullUps aktivieren
36
  PORTC |= ( (1<<PC2) | (1<<PC3) | (1<<PC4) | (1<<PC5) | (1<<PC6) | (1<<PC7) );
37
  PORTB |= ( (1<<PB0) | (1<<PB1) | (1<<PB2) | (1<<PB3) | (1<<PB4) );
38
  PORTD |= ( (1<<PD5) | (1<<PD6) | (1<<PD7) );
39

40
  while(1)
41
  {
42
    for(c=0;c<8;c++)
43
    {
44
      DDRA &=~ (0XFF);
45
      DDRA |= (0X01<<c);
46
                        hit_val = 0;
47
  
48
      if ((PIND & (1 << PIND7)) == 0 ) {
49
        hit_val = 8 * 8 + c;
50
      }
51

52
      if ((PIND & (1 << PIND5)) == 0 ) {
53
        hit_val = 9 * 8 + c;
54
      }
55
      
56

57
      if ((PINC & (1 << PINC2)) == 0 ) {
58
        hit_val = 10 * 8 + c;
59
      }
60

61
      if ((PINC & (1 << PINC3)) == 0 ) {
62
        hit_val = 11 * 8 + c;
63
      }
64
      
65
      
66
      if ((PINC & (1 << PINC4)) == 0 ) {
67
        hit_val = 12 * 8 + c;
68
      }
69
      
70
      if ((PINC & (1 << PINC5)) == 0 ) {
71
        hit_val = 13 * 8 + c;
72
      }
73
      
74
      if ((PINC & (1 << PINC6)) == 0 ) {
75
        hit_val = 14 * 8 + c;
76
      }
77
      
78
      if ((PINC & (1 << PINC7)) == 0 ) {
79
        hit_val = 15 * 8 + c;
80
      }
81
      
82
      if ((PINB & (1 << PINB0)) == 0 ) {
83
        hit_val = 16 * 8 + c;
84
      }
85
      
86
      if ((PINB & (1 << PINB1)) == 0 ) {
87
        hit_val = 17 * 8 + c;
88
      }
89
      
90
      if ((PINB & (1 << PINB2)) == 0 ) {
91
        hit_val = 18 * 8 + c;
92
      }
93
      
94
      if ((PINB & (1 << PINB3)) == 0 ) {
95
        hit_val = 19 * 8 + c;
96
      }
97
      
98
      if ((PINB & (1 << PINB4)) == 0 ) {
99
        hit_val = 20 * 8 + c;
100
      }
101
      
102
      if ((PIND & (1 << PIND6)) == 0 ) {
103
        hit_val = 21 * 8 + c;
104
      }
105

106
      if(hit_val > 0) {
107
        uart_puti_dec(hit_val);
108
        uart_puts("\n");
109
        hit_val = 0;
110
        _delay_ms(100);
111
      }
112
    }
113
  }
114
}
Gast #3539408
Lesenswert?

Das meinte ich damit.

Jetzt ist mir eben was aufgefallen, ist mir ja echt peinlich, ich habe 
irgendwie beim ganzen hin und her drehen von der falschen Seite gezählt, 
es handelt sich um PC3 der nicht korrekt arbeitet.

JTAG ist deaktiviert, wenn ich jedoch dort Masse rauflege macht der µC 
einen Reset oder der gleichen.
Gast #3539430
Lesenswert?

So okay, danke an alle die Hinweise gegeben haben.
Ich sitze wohl schon zu lange an dem Fehler und habe mich wohl echt 
verrannt, es war eine kleine Brücke zwischen PC3 und +5V.
Nun funktioniert alles bestens.

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