µC macht nicht was er soll

OP #3518913
Lesenswert?

Hi ihr alle,

ich bastel gerade an meinem ersten Projekt mit µC und mein Controller 
macht nicht ganz das was er soll.
Ich will mit Hilfe von 4 Tastern 4 LEDs zum Leuchten bringen. Sobald ein 
Taster geschlossen wird soll die jeweilige LED so lange leuchten, bis 
ein 5. Taster geschlossen wird. Die anderen Taster sollen solange 
ignoriert werden.
Das klappt eigentlich auch ganz gut.
Aber bei einem Taster passiert es immer wieder, dass zusätzlich zur 
richtigen auch eine zweite LED angeschalten wird, manchmal sogar nur die 
falsche LED. Die zweite LED ist aber immer die gleiche.
Kann das daran liegen, dass ich meinen µC zum Testen im Programmierboard 
lasse?
Im Code dürften eigentlich keine Fehler sein, dafür ist er zu einfach 
und der Fehler zu spontan unterschiedlich.
Fällt euch sonst noch was ein, woran das liegen könnte?

Danke für eure Hilfe

Gruß
Pamel
OP #3518938
Lesenswert?

Klar, sorry
1
/*
2
 * Buzzer.c
3
 *
4
 * Created: 04.02.2014 16:55:53
5
 *  Author: Paul
6
 */ 
7

8

9
#define F_CPU 1000000UL
10

11
#include <avr/io.h>
12
#include <util/delay.h>
13

14
int main(void)
15
{
16

17
  DDRB &= ~((1<<PB0) | (1<<PB1) | (1<<PB2) | (1<<PB3));  //Port B0-3 als Eingang definieren
18
  PORTB |=  (1<<PB0) | (1<<PB1) | (1<<PB2) | (1<<PB3);  //Port B0-3 interner Pull-Up aktivieren
19

20
  DDRA &= ~(1<<PA0);  //Port A0 als Eingang definieren    //Port A0 als reset-Button
21
  PORTA |= (1<<PA0);  //Port A0 interner Pull-Up aktivieren
22

23
  DDRD |=  (1<<PD0) | (1<<PD1) | (1<<PD2) | (1<<PD3);  //Port D0-3 als Ausgang definieren
24
  PORTD &= ~((1<<PD0) | (1<<PD1) | (1<<PD2) | (1<<PD3));    //Port D0-3 Spannung 0  
25
  
26
  uint8_t bitChanged = 0;
27
  
28
  PORTD |= (1<<PD3) | (1<<PD2) | (1<<PD1) | (1<<PD0);
29
  _delay_ms(400);
30
  PORTD &= ~(1<<PD3);
31
  _delay_ms(400);
32
  PORTD &= ~(1<<PD2);
33
  PORTD |= (1<<PD3);
34
  _delay_ms(400);
35
  PORTD &= ~(1<<PD1);
36
  PORTD |= (1<<PD2);
37
  _delay_ms(400);
38
  PORTD &= ~(1<<PD0);
39
  PORTD |= (1<<PD1);
40
  _delay_ms(400);
41
  PORTD |= (1<<PD0);
42
  _delay_ms(400);
43
  PORTD &= ~((1<<PD3) | (1<<PD2) | (1<<PD1) | (1<<PD0));
44

45
    while(1)
46
    {
47
        //TODO:: Please write your application code 
48
    
49
    if(!(PINB & (1 << PINB0)))
50
    {
51
      PORTD |= (1<<PD3);
52
      bitChanged = 1;
53
    }
54
    else if(!(PINB & (1 << PINB1)))
55
    {
56
      PORTD |= (1<<PD2);
57
      bitChanged = 1;
58
    }
59
    else if(!(PINB & (1 << PINB2)))
60
    {
61
      PORTD |= (1<<PD1);
62
      bitChanged = 1;
63
    }
64
    else if(!(PINB & (1 << PINB3)))
65
    {
66
      PORTD |= (1<<PD0);
67
      bitChanged = 1;
68
    }
69
    
70
    while(bitChanged == 1)
71
    {
72
      if(!(PINA & (1<<PINA0)))
73
      {
74
        bitChanged = 0;
75
        PORTD &= ~((1<<PD3) | (1<<PD2) | (1<<PD1) | (1<<PD0));
76
        
77
        PORTD |= (1<<PD3);
78
        _delay_ms(400);
79
        PORTD |= (1<<PD2);
80
        _delay_ms(400);
81
        PORTD |= (1<<PD1);
82
        _delay_ms(400);
83
        PORTD |= (1<<PD0);
84
        _delay_ms(400);
85
        
86
        PORTD &= ~((1<<PD3) | (1<<PD2) | (1<<PD1) | (1<<PD0));
87
      }
88
    }
89
    }
90
}
OP #3518989
Lesenswert?

ATtiny 2313
PortB soll im Betrieb ansonnsten leer sein.
Momentan hängen da noch die Verbindungen zum Programmieren drauf. Wie 
sie hier: 
http://www.produktinfo.conrad.com/datenblaetter/150000-174999/154658-an-01-en-ATAVRDRAGON.pdf 
auf Seite 32 beschrieben sind.
Ich weis halt nicht, ob da nach dem Programmieren noch Spannungen 
anliegen. Aber die Pins die ich verwende sind nicht nochmal belegt. Nur 
andere Pins des selben Ports
#3519008
Lesenswert?

Laut Doku vom AVR Dragon sind die Pins tatsächlich nc, also 'not 
connected'.

Wie hast du deinen Hardware-Aufbau gemacht? Fliegende Verdrahtung? Gibt 
es eine Chance für einen ungewollten Kurzschluss zwischen 2 LED 
Leitungen?

Laut deinem Programm gibt es keine Möglichkeit, wie 2 LED je gemeinsam 
leuchten könnten. Durch die if-else_if Cascade ist das ausgeschlossen. 
Das müsste IMHO daher irgendein Hardware Problem sein.
#3519057
Lesenswert?

Hi,

Paul Rummel schrieb:
> So weit ich das sehen kann nicht.
> Ich hab hier mal zwei Fotos dran gehängt.

Manchmal - zumindest wenn die Möglichkeit besteht - kann es nützlich 
sein den µC einfach mal aus der Fassung zu nehmen und an den 
ensprechenden Pins des Sockels mit einer Brücke direkt Ub einzuspeisen. 
(fliegende Verdrahtung, z.B. Messkabel mit zwei Spitzen... Oder einfach 
nur ein Stück draht)
Dann sieht man sofort ob der dort angeschlossene TEil der HArdware 
vernünftig funktioniert. (In deinem Fall ob die LED und wirklich nur die 
LED leuchtet)

Gruß
Carsten

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