Mit ADC und Poti, LEDs ansteuern

Gast #1573995
Lesenswert?

Hallo,

ich habe mal die Frage warum mein Code nicht funktioniert?
1
#include <avr/io.h>
2
#include <stdint.h>
3
#define L1  PD2   //LEDs
4
#define L2  PD3
5
#define L3  PD4
6
#define L4  PD5
7
#define L5  PD6
8
#define L6  PD7
9
#define S2  PC1  //Spalte von LED Matrix die ich ansteuern möchte
10

11
#define Freigeben(x)          PORTC &=~(1<<(x))
12
#define Sperren(x)     PORTC |=(1<<(x)); PORTD = 0b00000000
13
#define LED(x)       PORTD |=(1<<(x));
14

15
uint16_t adc()
16
{
17
  ADCSRA = (1<<ADEN)  | (1<<ADPS2) | (1<<ADPS0);
18
  ADMUX = 0;
19
  ADCSRA |=  (1<<ADSC);
20
  while (ADCSRA & (1<<ADIF));
21
  return ADCW;
22
}
23

24
int main()
25
{
26
DDRD |= (1<<L1)|(1<<L2)|(1<<L3)|(1<<L4)|(1<<L5)|(1<<L6);          
27
DDRC |= (1<<PC0)|(1<<S2);
28
PORTC |= 0b11111111;
29
while(1)
30
{
31
Freigeben(S2);
32
PORTD |= adc();
33
Sperren(S2);
34
}
35
}

Ich denke das mein Befehl, wo ich dem PORTD den 10Bit Wert von der 
Funktion adc() übergeben will, falsch ist, weiß aber nicht wie er 
aussehen muss?
Gast #1574043
Lesenswert?

Es leuchtet alle LEDs (L1-6) in der Spalte (S2), habe den Code jetzt so 
verändert, klappt aber immer noch nicht

1
#include <avr/io.h>
2
#include <stdint.h>
3
#define L1  PD2   //LEDs
4
#define L2  PD3
5
#define L3  PD4
6
#define L4  PD5
7
#define L5  PD6
8
#define L6  PD7
9
#define S2  PC1  //Spalte von LED Matrix die ich ansteuern möchte
10

11
#define Freigeben(x)          PORTC &=~(1<<(x))
12
#define Sperren(x)     PORTC |=(1<<(x)); PORTD = 0b00000000
13
#define LED(x)       PORTD |=(1<<(x))
14

15
uint16_t adc()
16
{
17
  ADCSRA = (1<<ADEN)  | (1<<ADPS2) | (1<<ADPS0);
18
  ADMUX = 0;
19
  ADCSRA |=  (1<<ADSC);
20
  while (ADCSRA & (1<<ADIF));
21
  return ADCW;
22
}
23

24
int main()
25
{
26
DDRD |= (1<<L1)|(1<<L2)|(1<<L3)|(1<<L4)|(1<<L5)|(1<<L6);          
27
DDRC |= (1<<S2);
28
while(1)
29
{
30
Freigeben(S2);
31
PORTD = adc();
32
Sperren(S2);
33
}
34
}


Muss ich meinen Poti evtl als Eingang deklarieren, bzw an PullUp hängen, 
ich denke zwar nicht aber fragen kostet ja nichts.
Gast #1574076
Lesenswert?

Klappt immer noch nicht.

Was mir grade auch aufgefallen ist, das die S1 anfängt zu leuchten wenn 
ich den Poti voll aufdrehe. Das verstehe ich allerdings nicht, zwar 
hängt der Poti an PC0 was eigentlich auch S1 ist, aber ich habe den ja 
nicht deklatiert und nutze PC0 eigentlich als ADC.
#1574510
Lesenswert?

Ich denke mal, du hast dich mit deinen 'Wahnsinnsmakros selbst 
ausgetrickst. Schau doch mal was dein 'Sperren' Makro mit dem Port D 
macht. Es wird relativ sinnfrei sein, am Port D den Wert vom ADC 
auszugeben, wenn der Port gleich darauf wieder einen ganz anderen Wert 
bekommt.

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