Mit ADC und Poti, LEDs ansteuern

Gast #1573995
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.