www.mikrocontroller.net

Forum: Compiler & IDEs poti messen mit adc


Autor: thomas (Gast)
Datum:

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

Autor: Daniel V. (danvet)
Datum:

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

Autor: thomas (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
das hier ist der schaltplan

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

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

Autor: Daniel V. (danvet)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
thomas schrieb:
> das hier ist der schaltplan

Ich sehe leider kein Poti...

Autor: thomas (Gast)
Datum:

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

Autor: MB (Gast)
Datum:

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

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

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

Autor: thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ka wir haben die schaltung von der Schule bekommen und gelötet

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

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

Autor: Chris (Gast)
Datum:

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

Autor: Chris (Gast)
Datum:

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

Autor: thomas (Gast)
Datum:
Angehängte Dateien:

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

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

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

Autor: thomas (Gast)
Datum:

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

#include <avr/io.h>
#include <inttypes.h>
int main (void)
{
/* ADC initialisieren */
void ADC_Init(void) {
 
  uint16_t result;
 
  ADMUX = (1<<REFS1) | (1<<REFS0);      // interne Referenzspannung nutzen
  ADCSRA = (1<<ADPS1) | (1<<ADPS0);     // Frequenzvorteiler
  ADCSRA |= (1<<ADEN);                  // ADC aktivieren
 
  /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest
     also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */
 
  ADCSRA |= (1<<ADSC);                  // eine ADC-Wandlung 
  while (ADCSRA & (1<<ADSC) );          // auf Abschluss der Konvertierung warten
  /* ADCW muss einmal gelesen werden, sonst wird Ergebnis der nächsten
     Wandlung nicht übernommen. */
  result = ADCW;
}
 
/* ADC Einzelmessung */
uint16_t ADC_Read( uint8_t channel )
{
  // Kanal waehlen, ohne andere Bits zu beeinflußen
  ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
  ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
  while (ADCSRA & (1<<ADSC) )     // auf Abschluss der Konvertierung warten
    ;
  return ADCW;                    // ADC auslesen und zurückgeben
}

if(ADCW = 0,7)        // erste LED leuchtet
{
  DDRC = 1;
  PORTC=PORTC &254;
}

if(ADCW = 1,4)        // zeite LED leuchtet
{
  DDRC = 2;
  PORTC=PORTC &252;
}

if(ADCW = 2,1)      // dritte LED leuchtet
{
  DDRC = 8;
  PORTC=PORTC &246;
}

if(ADCW = 2,8)      // vierte LED leuchtet
{
  DDRC = 16;
  PORTC=PORTC &238;
}

if(ADCW = 3,5)      // fünfte LED leuchtet
{
  DDRC = 32;
  PORTC=PORTC &222;
}

}





Autor: XXX (Gast)
Datum:

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

Autor: thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es wurde kein fehler angezeigt ung auch ohne warnings

Autor: XXX (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und was sind das für Zuweisungen??

if(ADCW = 0,7)

Was soll da passieren??

Gruß
Joachim

Autor: thomas (Gast)
Datum:

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

Autor: U.R. Schmitt (Gast)
Datum:

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

Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
[X] du brauchst ein C-Buch.

Autor: U.R. Schmitt (Gast)
Datum:

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

Autor: Daniel V. (danvet)
Datum:

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

Autor: thomas (Gast)
Datum:

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

Autor: U.R. Schmitt (Gast)
Datum:

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

Autor: Daniel V. (danvet)
Datum:

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

Autor: thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das einzige was wir vom lehrer lernen is schauts im tutorial nach :D

Autor: Daniel V. (danvet)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würds mal irgendwie so probieren:
#include <avr/io.h>
#include <inttypes.h>

/* ADC initialisieren */
void ADC_Init(void) {
 
  uint16_t result;
 
  ADMUX = (1<<REFS1) | (1<<REFS0);      // interne Referenzspannung nutzen
  ADCSRA = (1<<ADPS1) | (1<<ADPS0);     // Frequenzvorteiler
  ADCSRA |= (1<<ADEN);                  // ADC aktivieren
 
  /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest
     also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */
 
  ADCSRA |= (1<<ADSC);                  // eine ADC-Wandlung 
  while (ADCSRA & (1<<ADSC) );          // auf Abschluss der Konvertierung warten
  /* ADCW muss einmal gelesen werden, sonst wird Ergebnis der nächsten
     Wandlung nicht übernommen. */
  result = ADCW;
}

/* ADC Einzelmessung */
uint16_t ADC_Read( uint8_t channel )
{
  // Kanal waehlen, ohne andere Bits zu beeinflußen
  ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
  ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
  while (ADCSRA & (1<<ADSC) )     // auf Abschluss der Konvertierung warten
    ;
  return ADCW;                    // ADC auslesen und zurückgeben
}


int main (void)
{

ADC_Init();

while(1){
if(ADC_Read(0) <= 30)        // erste LED leuchtet
{
  DDRC = 1;
  PORTC=PORTC &254;
}

else if(ADC_Read(0) <= 60)        // zeite LED leuchtet
{
  DDRC = 2;
  PORTC=PORTC &252;
}

else if(ADC_Read(0) <= 90)      // dritte LED leuchtet
{
  DDRC = 8;
  PORTC=PORTC &246;
}

else if(ADC_Read(0) <= 120)      // vierte LED leuchtet
{
  DDRC = 16;
  PORTC=PORTC &238;
}

else if(ADC_Read(0) <= 150)      // fünfte LED leuchtet
{
  DDRC = 32;
  PORTC=PORTC &222;
}
}
}

Autor: thomas (Gast)
Datum:

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

Autor: Daniel V. (danvet)
Datum:

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

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

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

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

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

Autor: U.R. Schmitt (Gast)
Datum:

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

Autor: thomas (Gast)
Datum:

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

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

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

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

Bewertung
0 lesenswert
nicht lesenswert
int main (void)
{
  int ADCValue = 0;

  ADC_Init();
  DDRC = (1<<PC1) | (1<<PC2) | (1<<PC3) | (1<<PC4) | (1<<PC5);

  while(1){
    
    ADCValue = ADC_Read(0);

    PORTC = 0;
    if( ADCValue <= 30 )        // erste LED leuchtet
      PORTC = (1<<PC1);

    else if( ADCValue  <= 60 )        // zeite LED leuchtet
      PORTC = (1<<PC1) | (1<<PC2);

    else if( ADCValue <= 90 )      // dritte LED leuchtet
      PORTC = (1<<PC1) | (1<<PC2) | (1<<PC3);

    else if( ADCValue <= 120 )      // vierte LED leuchtet
      PORTC = (1<<PC1) | (1<<PC2) | (1<<PC3) | (1<<PC4);

    else if( ADCValue <= 150 )      // fünfte LED leuchtet
      PORTC = (1<<PC1) | (1<<PC2) | (1<<PC3) | (1<<PC4) | (1<<PC5);
  }
}

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.

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

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

Autor: Daniel V. (danvet)
Datum:

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

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

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

Autor: Daniel V. (danvet)
Datum:

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

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

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

Autor: thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab nur bei JMP2 einen Jumper reingesetzt, bei den anderen hab ich 
keine jumper drinnen

Autor: Daniel V. (danvet)
Datum:

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

Autor: thomas (Gast)
Datum:

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

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

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

Autor: Daniel V. (danvet)
Datum:

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

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

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

Autor: thomas (Gast)
Datum:

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

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

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

Autor: thomas (Gast)
Datum:
Angehängte Dateien:
  • preview image for 2.png
    2.png
    359 KB, 225 Downloads

Bewertung
0 lesenswert
nicht lesenswert
genaueres zum programmer

Autor: thomas (Gast)
Datum:

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

Autor: thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
linkes bild rot, rechtes bild gelber jumper

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

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

Autor: thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
   if( ADCValue  <= 60 )        // zeite LED leuchtet
      PORTC = (1<<PC1) | (1<<PC2);

    else if( ADCValue <= 90 )      // dritte LED leuchtet
      PORTC = (1<<PC1) | (1<<PC2) | (1<<PC3);

    else if( ADCValue <= 120 )      // vierte LED leuchtet
      PORTC = (1<<PC1) | (1<<PC2) | (1<<PC3) | (1<<PC4);

    else if( ADCValue <= 150 )      // fünfte LED leuchtet
      PORTC = (1<<PC1) | (1<<PC2) | (1<<PC3) | (1<<PC4) | (1<<PC5);
  }
}



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

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

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

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.