www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mit ADC und Poti, LEDs ansteuern


Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

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

uint16_t adc()
{
  ADCSRA = (1<<ADEN)  | (1<<ADPS2) | (1<<ADPS0);
  ADMUX = 0;
  ADCSRA |=  (1<<ADSC);
  while (ADCSRA & (1<<ADIF));
  return ADCW;
}

int main()
{
DDRD |= (1<<L1)|(1<<L2)|(1<<L3)|(1<<L4)|(1<<L5)|(1<<L6);          
DDRC |= (1<<PC0)|(1<<S2);
PORTC |= 0b11111111;
while(1)
{
Freigeben(S2);
PORTD |= adc();
Sperren(S2);
}
}

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?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ich habe mal die Frage warum mein Code nicht funktioniert?
WAS funktioniert nicht?

> wo ich dem PORTD den 10Bit Wert von der Funktion adc() übergeben will
Übergeben geht in C so:
PORTD = adc();

Autor: Tobi (Gast)
Datum:

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

#include <avr/io.h>
#include <stdint.h>
#define L1  PD2   //LEDs
#define L2  PD3
#define L3  PD4
#define L4  PD5
#define L5  PD6
#define L6  PD7
#define S2  PC1  //Spalte von LED Matrix die ich ansteuern möchte

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

uint16_t adc()
{
  ADCSRA = (1<<ADEN)  | (1<<ADPS2) | (1<<ADPS0);
  ADMUX = 0;
  ADCSRA |=  (1<<ADSC);
  while (ADCSRA & (1<<ADIF));
  return ADCW;
}

int main()
{
DDRD |= (1<<L1)|(1<<L2)|(1<<L3)|(1<<L4)|(1<<L5)|(1<<L6);          
DDRC |= (1<<S2);
while(1)
{
Freigeben(S2);
PORTD = adc();
Sperren(S2);
}
}


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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
while(!(ADCSR&(1<<ADIF)));         // Wait for A/D conversion to finish

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah okay, teste ich gleich mal. Schon mal danke

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.