Forum: Compiler & IDEs PB4 am atmega32 will nicht


von Sebastian (Gast)


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.

von Karl H. (kbuchegg)


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.

: Bearbeitet durch User
von Sebastian (Gast)


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
}

: Bearbeitet durch User
von Bülent C. (mirki)


Lesenswert?

sieht eigentlich soweit ok aus...Hast Du auch mal die Schaltung/Platine 
geprüft, ob am PB4 wirklich alles sauber beschaltet ist?

von Sebastian (Gast)


Lesenswert?

Ja, habe auch schon direkt ein Signal angelegt, auch dies brachte kein 
Erfolg.

von Bülent C. (mirki)


Lesenswert?

Was für ein Signal??
Du musst den Pin zum testen auf Masse ziehen, da Du ein PullUp hast.

: Bearbeitet durch User
von Sebastian (Gast)


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.

von Sebastian (Gast)


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.

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.