Forum: Compiler & IDEs poti messen mit adc


von thomas (Gast)


Lesenswert?

hallo leute,

ich möchte den potentiometerwert mittels adc wandler einlesen und an den 
leuchtdioden anzeigen, jedoch hab ich da eine frage muss ich einen 
spannungsteiler machen wenn ich den wert auslesen will oder reicht es 
wenn ich den poti direkt am ADC anschließe?

danke lg thomas

von Daniel V. (danvet)


Lesenswert?

Hast du mal einen Schaltplan?
Falls die Eingangsspannung des ADC nicht überschritten wird kannst du 
direkt drauf gehen.

von thomas (Gast)


Angehängte Dateien:

Lesenswert?

das hier ist der schaltplan

von Karl H. (kbuchegg)


Lesenswert?

thomas schrieb:

> ich möchte den potentiometerwert mittels adc wandler einlesen und an den
> leuchtdioden anzeigen, jedoch hab ich da eine frage muss ich einen
> spannungsteiler machen wenn ich den wert auslesen will oder reicht es
> wenn ich den poti direkt am ADC anschließe?

Beides:
Du schliesst das Poti direkt an den ADC an. Aber du verschaltest es so, 
dass es einen Spannungsteiler bildet.

Man kann sich ja ein Poti so vorstellen, dass die Poti-interne 
Widerstandsbahn durch den Abgreifer in 2 getrennte Widerstände 
unterteilt wird, deren Wert sich ändert, wenn man den Abgreifer 
verschiebt.

Und genau das ist ja ein Spannungsteiler: 2 Widerstände, wobei die 
gteilte Spannung am Verbindungspunkt der Widerstände abgegriffen wird.

von Daniel V. (danvet)


Lesenswert?

thomas schrieb:
> das hier ist der schaltplan

Ich sehe leider kein Poti...

von thomas (Gast)


Lesenswert?

also verbinde ich eines der anschlüsse mit dem ground und die anderen 2 
anschlüsse mit den eingängen des ad wandlers?

von MB (Gast)


Lesenswert?

Was zum geier ist ein "Schnöll-Widerstand" und eine "Schnöll-Spule"? :)

von Karl H. (kbuchegg)


Lesenswert?

thomas schrieb:
> also verbinde ich eines der anschlüsse mit dem ground und die anderen 2
> anschlüsse mit den eingängen des ad wandlers?

Das wäre dann kein Spannungsteiler

Ein Endpunkt kommt an GND. Der andere Endpunkt an Vcc.
Am 3. Potianschluss hast du dann eine Spannung, die du durch verdrehen 
des Potis von 0 bis Vcc verstellen kannst.

von thomas (Gast)


Lesenswert?

ka wir haben die schaltung von der Schule bekommen und gelötet

von Karl H. (kbuchegg)


Lesenswert?

thomas schrieb:
> ka wir haben die schaltung von der Schule bekommen und gelötet

Das ist ja das eigentlich traurige.
(abgesehen davon, dass eine Frage nach Beschaltung ganz sicher nichts im 
GCC Forum verloren hat)

Die Bezeichnung des Widerstands und der Spule mag eventuell damit 
zusmmenhängen, dass der Zeichner ein gewisser "Manfred Schnöll" ist.

von Chris (Gast)


Lesenswert?

Besser wäre von AREF aus mit 100nF an GND gehen und dann die interne 
Referenzspannung verwenden. Da kannst Du dann beim ATMega8 AVcc oder 
2,56V wählen (siehe Datenblatt S. 201).
Wenn Du hier AVcc wählst, brauchst Du keinen Spannungsteiler mehr und 
kannst den Poti wie oben von K. H. Buchegger beschrieben anschließen.

von Chris (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Die Bezeichnung des Widerstands und der Spule mag eventuell damit
> zusmmenhängen, dass der Zeichner ein gewisser "Manfred Schnöll" ist.

Also wenn, dann bitte schon "Werner Schnöll". Ist das etwa der hier? :-)
http://homepage.univie.ac.at/werner.schnoell/

von thomas (Gast)


Angehängte Dateien:

Lesenswert?

also ich hab den potentiometer wie im Anhang angeschlossen, ist das 
soweit ok? d.h. jetzt kann ich mit dem programmieren beginnen oder?

von Karl H. (kbuchegg)


Lesenswert?

thomas schrieb:
> also ich hab den potentiometer wie im Anhang angeschlossen, ist das
> soweit ok?

Häng ein Voltmeter an PC0 und sieh nach ob du durch verdrehen des Potis 
dort die Spannung ändern kannst.
Manchmal ist man mit Selbsthilfe einfach besser bedient als wie wenn man 
für alles und jeden eine Tante braucht, die mit einem aufs Klo Lulu 
machen geht.
Wer eine Schaltung zusammenlötet, sollte eigentlich kein Problem damit 
haben, mit einem Voltmeter Spannungen nachzumessen.

> d.h. jetzt kann ich mit dem programmieren beginnen oder?

Ja.

von thomas (Gast)


Lesenswert?

Ich hab jetzt ein Problem mit dem Programm :S

Ich hab mein Eingangssignal an PC0 angeschlossen. Jedoch verändern sich 
bei den LED´s nichts. Hier ist der Programmcode:

1
#include <avr/io.h>
2
#include <inttypes.h>
3
int main (void)
4
{
5
/* ADC initialisieren */
6
void ADC_Init(void) {
7
 
8
  uint16_t result;
9
 
10
  ADMUX = (1<<REFS1) | (1<<REFS0);      // interne Referenzspannung nutzen
11
  ADCSRA = (1<<ADPS1) | (1<<ADPS0);     // Frequenzvorteiler
12
  ADCSRA |= (1<<ADEN);                  // ADC aktivieren
13
 
14
  /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest
15
     also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */
16
 
17
  ADCSRA |= (1<<ADSC);                  // eine ADC-Wandlung 
18
  while (ADCSRA & (1<<ADSC) );          // auf Abschluss der Konvertierung warten
19
  /* ADCW muss einmal gelesen werden, sonst wird Ergebnis der nächsten
20
     Wandlung nicht übernommen. */
21
  result = ADCW;
22
}
23
 
24
/* ADC Einzelmessung */
25
uint16_t ADC_Read( uint8_t channel )
26
{
27
  // Kanal waehlen, ohne andere Bits zu beeinflußen
28
  ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
29
  ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
30
  while (ADCSRA & (1<<ADSC) )     // auf Abschluss der Konvertierung warten
31
    ;
32
  return ADCW;                    // ADC auslesen und zurückgeben
33
}
34
35
if(ADCW = 0,7)        // erste LED leuchtet
36
{
37
  DDRC = 1;
38
  PORTC=PORTC &254;
39
}
40
41
if(ADCW = 1,4)        // zeite LED leuchtet
42
{
43
  DDRC = 2;
44
  PORTC=PORTC &252;
45
}
46
47
if(ADCW = 2,1)      // dritte LED leuchtet
48
{
49
  DDRC = 8;
50
  PORTC=PORTC &246;
51
}
52
53
if(ADCW = 2,8)      // vierte LED leuchtet
54
{
55
  DDRC = 16;
56
  PORTC=PORTC &238;
57
}
58
59
if(ADCW = 3,5)      // fünfte LED leuchtet
60
{
61
  DDRC = 32;
62
  PORTC=PORTC &222;
63
}
64
65
}

von XXX (Gast)


Lesenswert?

Hallo

Und das ist so ohne Fehler/Warnung compiliert worden?
Die Definitionen von ADC_init und ADC_read haben absolut
garnichts innerhalb der main zu suchen.

Gruß
Joachim

von thomas (Gast)


Lesenswert?

es wurde kein fehler angezeigt ung auch ohne warnings

von XXX (Gast)


Lesenswert?

Und was sind das für Zuweisungen??

if(ADCW = 0,7)

Was soll da passieren??

Gruß
Joachim

von thomas (Gast)


Lesenswert?

er bekommt ja vom ad wandler die spannungswerte wenn der wert 0,7 is 
soll er die erste led zum leuchten bringen

von U.R. Schmitt (Gast)


Lesenswert?

Die Funktionen
ADC_Read und ADC_Init sind auch innerhalb von main deklariert.
Dafür werden sie nicht aufgerufen.
Und eine Hauptschleife habe ich auch nicht gefunden.

Hast Du schon mal was in C programmiert?

von Floh (Gast)


Lesenswert?

[X] du brauchst ein C-Buch.

von U.R. Schmitt (Gast)


Lesenswert?

thomas schrieb:
> er bekommt ja vom ad wandler die spannungswerte wenn der wert 0,7 is
> soll er die erste led zum leuchten bringen

Wie soll bitte ein 16Bit Integer den Wert 0,7 kriegen?
Was weisst Du von Ganzzahl und Fliesskomaadatentypen?

von Daniel V. (danvet)


Lesenswert?

thomas schrieb:
> Ich hab jetzt ein Problem mit dem Programm :S
> [/c]

Naja, für jemanden, der einfach mal lötet und einfach mal programmiert 
ist das gar nicht so schlecht. Im Wesentlichen ist ja alles da... ;-)

Jetzt noch die einzelnen Elemente richtig sortieren, dann wird das 
schon.

von thomas (Gast)


Lesenswert?

das ist das zeite oder dritte Programm das ich schreib wir haben erst 
damit begonnen :D deshald die vielen fehler

von U.R. Schmitt (Gast)


Lesenswert?

Floh schrieb:
> [X] du brauchst ein C-Buch.

[X] Du musst das Buch lesen
[X] Du musst die Grundlagen auch verstehen
[X] Du musst wissen wie ein µC und seine Peripherie prinzipiell 
funktioniert

Entweder
[ ] Du hast einen total besch. Lehrer.
oder
[ ] Du bist zu faul um im Unterricht aufzupassen

von Daniel V. (danvet)


Lesenswert?

U.R. Schmitt schrieb:
> Floh schrieb:
>> [X] du brauchst ein C-Buch.
>
> [X] Du musst das Buch lesen
> [X] Du musst die Grundlagen auch verstehen
> [X] Du musst wissen wie ein µC und seine Peripherie prinzipiell
> funktioniert
>
> Entweder
> [ ] Du hast einen total besch. Lehrer.
> oder
> [ ] Du bist zu faul um im Unterricht aufzupassen

Nana, Schüler und Anfänger. Ich finde seinen Ansatz sehr kreativ und gar 
nicht mal so verkehrt!

von thomas (Gast)


Lesenswert?

das einzige was wir vom lehrer lernen is schauts im tutorial nach :D

von Daniel V. (danvet)


Lesenswert?

Ich würds mal irgendwie so probieren:
1
#include <avr/io.h>
2
#include <inttypes.h>
3
4
/* ADC initialisieren */
5
void ADC_Init(void) {
6
 
7
  uint16_t result;
8
 
9
  ADMUX = (1<<REFS1) | (1<<REFS0);      // interne Referenzspannung nutzen
10
  ADCSRA = (1<<ADPS1) | (1<<ADPS0);     // Frequenzvorteiler
11
  ADCSRA |= (1<<ADEN);                  // ADC aktivieren
12
 
13
  /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest
14
     also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */
15
 
16
  ADCSRA |= (1<<ADSC);                  // eine ADC-Wandlung 
17
  while (ADCSRA & (1<<ADSC) );          // auf Abschluss der Konvertierung warten
18
  /* ADCW muss einmal gelesen werden, sonst wird Ergebnis der nächsten
19
     Wandlung nicht übernommen. */
20
  result = ADCW;
21
}
22
23
/* ADC Einzelmessung */
24
uint16_t ADC_Read( uint8_t channel )
25
{
26
  // Kanal waehlen, ohne andere Bits zu beeinflußen
27
  ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
28
  ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
29
  while (ADCSRA & (1<<ADSC) )     // auf Abschluss der Konvertierung warten
30
    ;
31
  return ADCW;                    // ADC auslesen und zurückgeben
32
}
33
34
35
int main (void)
36
{
37
38
ADC_Init();
39
40
while(1){
41
if(ADC_Read(0) <= 30)        // erste LED leuchtet
42
{
43
  DDRC = 1;
44
  PORTC=PORTC &254;
45
}
46
47
else if(ADC_Read(0) <= 60)        // zeite LED leuchtet
48
{
49
  DDRC = 2;
50
  PORTC=PORTC &252;
51
}
52
53
else if(ADC_Read(0) <= 90)      // dritte LED leuchtet
54
{
55
  DDRC = 8;
56
  PORTC=PORTC &246;
57
}
58
59
else if(ADC_Read(0) <= 120)      // vierte LED leuchtet
60
{
61
  DDRC = 16;
62
  PORTC=PORTC &238;
63
}
64
65
else if(ADC_Read(0) <= 150)      // fünfte LED leuchtet
66
{
67
  DDRC = 32;
68
  PORTC=PORTC &222;
69
}
70
}
71
}

von thomas (Gast)


Lesenswert?

../ad_wandler_1.c:70: error: expected declaration or statement at end of 
input
make: *** [ad_wandler_1.o] Error 1
Build failed with 1 errors and 0 warnings...


 da komt die fehlermeldung heraus

von Daniel V. (danvet)


Lesenswert?

thomas schrieb:
> ../ad_wandler_1.c:70: error: expected declaration or statement at end of
> input
> make: *** [ad_wandler_1.o] Error 1
> Build failed with 1 errors and 0 warnings...
>
>
>  da komt die fehlermeldung heraus

Na denken musst du schon auch ein bißchen. Vielleicht fehlt das 
Semikolon bei der While-Schleife?

von Karl H. (kbuchegg)


Lesenswert?

thomas schrieb:
> ../ad_wandler_1.c:70: error: expected declaration or statement at end of
> input
> make: *** [ad_wandler_1.o] Error 1
> Build failed with 1 errors and 0 warnings...
>
>
>  da komt die fehlermeldung heraus

UNd? Was steht an Zeile 70 oder in der Zeile davor?

von Karl H. (kbuchegg)


Lesenswert?

Daniel V. schrieb:
> thomas schrieb:
>> ../ad_wandler_1.c:70: error: expected declaration or statement at end of
>> input
>> make: *** [ad_wandler_1.o] Error 1
>> Build failed with 1 errors and 0 warnings...
>>
>>
>>  da komt die fehlermeldung heraus
>
> Na denken musst du schon auch ein bißchen. Vielleicht fehlt das
> Semikolon bei der While-Schleife?

Seit wann braucht es da ein Semikolon.

Allerdings:
* Code einrücken wäre angebracht.
* Die DDR macht man am Programmanfang und lässt sie dann nach
  Möglichkeit in Ruhe.
* Das hier
    PORTC=PORTC &222;
  ist wohl so ziemlich die schlimmste Schreibweise die man finden kann.
  Da sieht man so gar nicht was da eigentlich passiert.
  Da ist ja die Schreibweise als Binärkonstante noch besser.

von U.R. Schmitt (Gast)


Lesenswert?

thomas schrieb:
> das einzige was wir vom lehrer lernen is schauts im tutorial nach :D

Also das erstere :-( Was für eine Ausbildung/Schule machst Du denn 
(Klasse Lehrjahr)
Dein Problem ist daß Dir so wie es aussiehst überall die Grundlagen 
fehlen. Du brauchst auf jeden Fall ein C-Buch und das musst du lesen und 
verstehen.
Für hier und jetzt:
Unterschied zwischen verschiedenen Datentypen?
Unterschied zwischen Zuweisung und Vergleichsoperator?
Was ist eine Funktion und wie rufe ich sie auf?
Was ist main()?
und und und...

Wenn Du das Interesse hast, dann klappt das auch mit der Zeit und Du 
kriegst bei einzelnen Problemen hier Hilfe.


Daniel V. schrieb:
> Nana, Schüler und Anfänger. Ich finde seinen Ansatz sehr kreativ und gar
> nicht mal so verkehrt!
Halt typisch irgendwelche Beispiele durchgeflöht und zusammenkopiert 
ohne auch nur annähernd zu verstehen was los ist.
Sorry ich bin noch von der alten Fraktion die sagt lieber erst mal nur 5 
Zeilen Code aber die selber geschrieben und verstanden. Auch wenn hinten 
nur "Hello World" rauskommt.

von thomas (Gast)


Lesenswert?

mit UND und ODER kann man ja bits setzen oder löschen deshalb die 
schreibweise

von Karl H. (kbuchegg)


Lesenswert?

thomas schrieb:
> mit UND und ODER kann man ja bits setzen oder löschen deshalb die
> schreibweise

Aber man nimmt da keine Dezimalzahlen!

Du gibst ja Zeiten auch nicht Einheiten der Protonzerfallsdauer an, 
sondern nimmst eine der Problemstellung angepasste Einheit.

von Karl H. (kbuchegg)


Lesenswert?

1
int main (void)
2
{
3
  int ADCValue = 0;
4
5
  ADC_Init();
6
  DDRC = (1<<PC1) | (1<<PC2) | (1<<PC3) | (1<<PC4) | (1<<PC5);
7
8
  while(1){
9
    
10
    ADCValue = ADC_Read(0);
11
12
    PORTC = 0;
13
    if( ADCValue <= 30 )        // erste LED leuchtet
14
      PORTC = (1<<PC1);
15
16
    else if( ADCValue  <= 60 )        // zeite LED leuchtet
17
      PORTC = (1<<PC1) | (1<<PC2);
18
19
    else if( ADCValue <= 90 )      // dritte LED leuchtet
20
      PORTC = (1<<PC1) | (1<<PC2) | (1<<PC3);
21
22
    else if( ADCValue <= 120 )      // vierte LED leuchtet
23
      PORTC = (1<<PC1) | (1<<PC2) | (1<<PC3) | (1<<PC4);
24
25
    else if( ADCValue <= 150 )      // fünfte LED leuchtet
26
      PORTC = (1<<PC1) | (1<<PC2) | (1<<PC3) | (1<<PC4) | (1<<PC5);
27
  }
28
}

Sofern die LED leuchten, wenn eine 1 am Portbit ausgegeben wird.

Edit: Was bei dir nicht der Fall ist.
D.h. du hast dann ein LED Band, bei dem die LED ausgehen, je höher die 
Spannung wird.

von Karl H. (kbuchegg)


Lesenswert?

Ausserdem:
laut Schaltplan liegen die LED an PC0, PC1, PC3, PC4 und PC5.
Lediglich PC2 ist soweit frei, dass man dort ein Poti anschliessen 
könnte.

Den ADC liest man daher nicht vom Kanal 0, sondern vom Kanal 2

Es sei denn natürlich, dein Schaltplan von weiter oben stimmt so nicht 
mehr.

Also: Wo hast du dein Poti angeschlossen?
Was hast du mit der LED gemacht, die normalerweise auf PC0 gejumpert 
ist?

von Daniel V. (danvet)


Lesenswert?

Karl heinz Buchegger schrieb:
> Ausserdem:
> laut Schaltplan liegen die LED an PC0, PC1, PC3, PC4 und PC5.
> Lediglich PC2 ist soweit frei, dass man dort ein Poti anschliessen
> könnte.
>
> Den ADC liest man daher nicht vom Kanal 0, sondern vom Kanal 2
>
> Es sei denn natürlich, dein Schaltplan von weiter oben stimmt so nicht
> mehr.

Naja, der Kanal 0 kam von mir, hab einfach mal irgendeinen genommen...

von Karl H. (kbuchegg)


Lesenswert?

Daniel V. schrieb:
> Karl heinz Buchegger schrieb:
>> Ausserdem:
>> laut Schaltplan liegen die LED an PC0, PC1, PC3, PC4 und PC5.
>> Lediglich PC2 ist soweit frei, dass man dort ein Poti anschliessen
>> könnte.
>>
>> Den ADC liest man daher nicht vom Kanal 0, sondern vom Kanal 2
>>
>> Es sei denn natürlich, dein Schaltplan von weiter oben stimmt so nicht
>> mehr.
>
> Naja, der Kanal 0 kam von mir, hab einfach mal irgendeinen genommen...

Ist ok.
Nur: AN PC0 kann man auch über den Jumper eine LED drann hängen.
Was hast du mit der LED gemacht? Ist der Jumper offen? (Denn dann hast 
du nur 4 LED zur Verfügung und nicht 5)

von Daniel V. (danvet)


Lesenswert?

Karl heinz Buchegger schrieb im Beitrag #1937955:

> Ist ok.
> Nur: AN PC0 kann man auch über den Jumper eine LED drann hängen.
> Was hast du mit der LED gemacht? Ist der Jumper offen?

Ich mach garnix mit dem Board. Das war nur ein Beispiel von mir. Der TE 
hat doch das Problem...

von Karl H. (kbuchegg)


Lesenswert?

Daniel V. schrieb:
> Karl heinz Buchegger schrieb im Beitrag #1937955:
>
>> Ist ok.
>> Nur: AN PC0 kann man auch über den Jumper eine LED drann hängen.
>> Was hast du mit der LED gemacht? Ist der Jumper offen?
>
> Ich mach garnix mit dem Board. Das war nur ein Beispiel von mir. Der TE
> hat doch das Problem...

Offentliche Entschuldigung.
Ich hab übersehen, dass diese Antwort nicht von thomas kam.

Trotzdem liegt es jetzt an ihm, aufzuzeigen, was er aus seinem 
Schaltplan gemacht hat. Der lässt ja durch die Jumper gewisse Freiheiten 
zu.

von thomas (Gast)


Lesenswert?

Ich hab nur bei JMP2 einen Jumper reingesetzt, bei den anderen hab ich 
keine jumper drinnen

von Daniel V. (danvet)


Lesenswert?

thomas schrieb:
> Ich hab nur bei JMP2 einen Jumper reingesetzt, bei den anderen hab ich
> keine jumper drinnen

Was ist mit J13,J14,J15,J16,J17 (die LEDs) ???? Wo hängt das Poti dran?

von thomas (Gast)


Lesenswert?

das poti hab ich an einem ende an vcc das andere ende am gnd und den 
mittleren ausgang am eingang vom ad wandler, und bei j13 - j17 hab ich 
halt die leds

von Karl H. (kbuchegg)


Lesenswert?

thomas schrieb:
> das poti hab ich an einem ende an vcc das andere ende am gnd und den
> mittleren ausgang am eingang vom ad wandler

Kabel direkt gelötet, oder wie?

> und bei j13 - j17 hab ich
> halt die leds

Also doch Jumper, oder wie?
Wenn du dein Poti an den PC0 geklemmt hast, dann kannst du die dort 
befindliche LED nicht benutzen. Du kannst nicht gleichzeitig am selben 
PIN mit dem ADC die Spannung messen und dann auch noch eine LED an 
diesem Pin ansteuern. Das heißt, können tust du schon, nur wird dann der 
ADC nur Unsinn messen.

von Daniel V. (danvet)


Lesenswert?

thomas schrieb:
> das poti hab ich an einem ende an vcc das andere ende am gnd und den
> mittleren ausgang am eingang vom ad wandler, und bei j13 - j17 hab ich
> halt die leds

Jo mei, dann schalte doch erstmal die LEDs ohne AD-Wandler an und aus 
und schau ob das klappt. Ohne Jumpers werden die LEDs keinen Kontakt zum 
µC haben...

von Karl H. (kbuchegg)


Lesenswert?

thomas schrieb:
> Ich hab nur bei JMP2 einen Jumper reingesetzt, bei den anderen hab ich
> keine jumper drinnen

Wieso JMP2?
Das ist doch der Jumper am unteren Ende vom µC im Schaltplan, mit dem 
man sich selbst den Reset Pin unter dem Hintern wegziehen kann.

Oder meinst du einen anderen?


Sieh mal:
Von unserer Seite des Bildschirms kann keiner auf deine Platine schauen. 
Wir haben nur den Schaltplan und das was du erzählst. Und das was du 
erzählst passt so gar nicht zu dem, was sich laut Schaltplan als 
vernünftig darstellt.

von thomas (Gast)


Lesenswert?

ich hab schon verschiedene programme geschrieben mitdenen ich die leds 
ansteuern konnte d.h. so leuchten lassen konnte wie ich es wollte z.b. 
blinkled oder das alle der reihe nach leuchten bei den leds sollte daher 
kein problem bestehen

von Karl H. (kbuchegg)


Lesenswert?

thomas schrieb:
> ich hab schon verschiedene programme geschrieben mitdenen ich die leds
> ansteuern konnte d.h. so leuchten lassen konnte wie ich es wollte z.b.
> blinkled oder das alle der reihe nach leuchten bei den leds sollte daher
> kein problem bestehen

Also sind die Jumper dort gesetzt?

Gut.

Nur: an PC0 musst du den LED Jumper entfernen, wenn du den Pin als ADC 
Eingang benutzen willst.

von thomas (Gast)


Angehängte Dateien:

Lesenswert?

genaueres zum programmer

von thomas (Gast)


Lesenswert?

ich hab nur den roten jumper drinnen, bei den leds gibts die jumper die 
eingezeichnet worden sind überhaupt nicht ich hab unten bei der platine 
nachgeschaut :S

von thomas (Gast)


Lesenswert?

linkes bild rot, rechtes bild gelber jumper

von Karl H. (kbuchegg)


Lesenswert?

Mach mal ein Photo von deinem Aufbau. So wie er jetzt ist.
Sonst raten wir hier noch 2 Stunden fröhlich drauflos, ohne das es zu 
etwas führt.

von thomas (Gast)


Lesenswert?

Das Programm funktioniert! Ich hab einfach die LED rausgenommen am Port 
PC0, jetzt hab ich nur 4 leds zur verfügüng aber das ist auch ok
1
   if( ADCValue  <= 60 )        // zeite LED leuchtet
2
      PORTC = (1<<PC1) | (1<<PC2);
3
4
    else if( ADCValue <= 90 )      // dritte LED leuchtet
5
      PORTC = (1<<PC1) | (1<<PC2) | (1<<PC3);
6
7
    else if( ADCValue <= 120 )      // vierte LED leuchtet
8
      PORTC = (1<<PC1) | (1<<PC2) | (1<<PC3) | (1<<PC4);
9
10
    else if( ADCValue <= 150 )      // fünfte LED leuchtet
11
      PORTC = (1<<PC1) | (1<<PC2) | (1<<PC3) | (1<<PC4) | (1<<PC5);
12
  }
13
}

den befehl der die erste led ansteuert hab ich einfach rausgenommen 
jedoch weis weis ich nicht wie sie auf die werte 60,90,120,150 gekommen 
sind ich hab die werte willkürlich geändert und herausgefunden das das 
programm geht, jetzt müsste ich nur wissen wie sie zu den werten 
gekommen sind um das ganze genauer zu machen

ich verwende einen 8,2k potentiometer
spannung am potentiometer max 3,6V

von Karl H. (kbuchegg)


Lesenswert?

thomas schrieb:

> jedoch weis weis ich nicht wie sie auf die werte 60,90,120,150 gekommen
> sind

Die haben wir einfach geschätzt bzw. irgendwelche Werte mal angenommen 
damit was dort steht.

Dein ADC liefert dir Werte zwischen 0 und 1023.

1023 ist Vollausschlag und der wird dann erreicht, wenn die zu messende 
Spannung der Referenzspannung entspricht (nicht ganz, aber machen wirs 
nicht komplizierter als unbedingt notwendig)

http://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#ADC_.28Analog_Digital_Converter.29

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.