komme mit dem A/D-Wandler vom Atmega8 nicht klar. (Sonnennachführung, Spannungen vergleichen)

OP #2024918
Lesenswert?

Hallo,

muss eine Sonnennachführung für die Schule machen. Im Gebiet 
Mikrocontroller bin ich noch nicht so weit. Mit dem A/D-Wandler komm ich 
garnicht klar.

Ich verwende Getriebemotoren und LDR´s.
Ich muss die SPannungen an 2 LDR´s miteinander vergleichen und 
dementsprechend SPannungen an den Motor geben.

Mein Problem ist, dass Ich mit dem AD-Wandler nicht klar komme. Könnte 
mir jemand Tipps geben, wie ich die Spannungen miteinander vergleiche? 
Die Spannungen die dann ausgegeben werden kriege ich selber hin.

Vielen Dank im voraus
Gast #2024922
Lesenswert?

> Könnte
> mir jemand Tipps geben, wie ich die Spannungen miteinander vergleiche?
1
if(spannung1>spannung2)
2
  tu_was();
3
else
4
  tu_was_anderes();
Was meinst du???

> Mein Problem ist, dass Ich mit dem AD-Wandler nicht klar komme.
Datenblatt + Tutorial hier fragen und selber denken.
Gast #2025133
Lesenswert?

Jürgen Schmitt schrieb:
> Ich weiss nicht wie es mit Spannung1>Spannung2 funktuniert

??? Wie meinst Du das?

Jürgen Schmitt schrieb:
> muss eine Sonnennachführung für die Schule machen. Im Gebiet
> Mikrocontroller bin ich noch nicht so weit. Mit dem A/D-Wandler komm ich
> garnicht klar.

Vieleicht erzählst Du uns einfach mal womit Du klargekommen bist, also 
was du bis jetzt schon hast und wie Du dir vortstellst wie die Sensorik 
und die Auswertung der Sensorik aussehen soll.
Gast #2025313
Lesenswert?

Jürgen Schmitt schrieb:
> Das ganze zu verschalten.

Wie hast du das verschalten? Schaltplan?
Wie willst Du mit 2 LDRs sie einfach nur Links und Rechts vom Panel sind 
merken wo die Sonne steht? die scheint genauso stark auf die linke wie 
auf die rechte Seite. Oder hast Du die in einem Winkel angebracht oder 
teilweise abgeschattet? Bild oder Skizze wäre sinnvoll.
Aber les  Dir bitte die Infos zu Bildformate durch.
#2025315
Lesenswert?

Jürgen Schmitt schrieb:
> also, ich nutze die 5v spannung vom mikroC.
> und einen LDR + einen vorwiderstand. bei lichteinfluss ändern sich die
> werte.

Gut.

Jetzt hängst du erst mal einen deiner Spannungsteiler an einen ADC 
Eingang



     + o
       |
      ---
      | |
      | |
      ---
       |
       +----------------------->  zum ADC Eingang
       |
      ---
      | | LDR
      | |
      ---
       |
     --+---------- Masse ------> zur µC Masse

und holst dir aus dem Tutorial die ADC Routinen. Mit denen schreibst du 
dir ein Programm, dass genau diesen einen ADC Eingang in einer Schleife 
immer wieder abfrägt. Vom ADC Eingang kriegst du eine Zahl zwischn 0 und 
1023. Wenn irgendwie möglich, lass dir diese Zahl irgendwo ausgeben. 
Dann schattest du den LDR mal mit der Hand ab oder leuchtest mit der 
SChreibtischlampe drauf und siehst dir an ob und wie sich der jeweils 
ausgelesene Wert verändert, wenn du die Beleuchtung des LDR veränderst.

Das ist dein erstes Ziel: 1 LDR in Betrieb nehmen und wenn sich dessen 
Beleuchtung verändert, verändern sich auch in deinem Programm die 
Zahlenwerte.

(Es hat keinen Sinn, da jetzt noch weitere Funktionalität drauf zu 
programmierern, solange du nicht 100% sicher weißt, dass der ADC 
tatsächlich funktioniert)
OP #2033520
Lesenswert?

+ o
       |
      ---
      | |
      | |
      ---
       |
       +----------------------->  PC 1
       |
      ---
      | | LDR
      | |
      ---
       |
     --+---------- Masse ------> zur µC Masse

hier ist ein LDR z.B.
könnte mir jemand vielleicht den Anfang also den code schicken? dann 
würde ich den rest hinbekommen, habe mich damit beschäftigt und mich uch 
mit meinem Lehrer dran gehockt. Wir kamen nicht weiter. Wenn mir jemand 
eins schicken könnte würde ich den rest hinbekommen. Unzwar nur Teil wo 
das ganze Ausgelesen wird. Ich mache das gnze mit C und AVR Studio 4.
#2033539
Lesenswert?

Steht alles im AVR-GCC-Tutorial.

Und wenn du das, was im Abschnitt über den ADC nicht explizit als C Code 
ausgeführt ist, nicht alleine hinkriegst, dann hat es keinen Sinn da 
weiter zu machen. Denn das bedeutet, dass du noch nicht mal die 
einfachsten Sachen programmierern kannst und du erst mal ganz bei 0 
anfangen musst. Und dazu ist das Forum nicht da.
OP #2044839
Lesenswert?

1
int main (void)
2
{
3
ISR (ADC_vect)  {LDR1 = ADCH}  
4
ADCSRA |= (1<<ADEN);  //ADC aktivieren
5
ADCSRA |= (1<<ADSC);  //Start convesion
6
ADCSRA |= (1<<ADFR);  //Dauernd aktivierent
7
ADCSRA |= (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
8
ADCSRA |= (1<<ADIE);
9

10
ADMUX = (1<<ADLAR);
11

12

13
//ADCSRA = 0b11101111;
14
sei();
15

16
}

hier habe ich mal den Code was ich bis jetzt habe. So bekomm ich ja die 
Werte von einem LDR. Da ich alle gleichzeitig messen kann, muss ich ja 
hinundher schalten. Und die Werte in 4 verschiedene Variablen 
abspeichern. Irgend wie mit der mux Tabelle. Wie mache ich das? Wie 
sieht der Befehl dazu aus? im Turturial konnt ich es nicht raussuchen.
Danke
#2044847
Lesenswert?

Jürgen Schmitt schrieb:

> sieht der Befehl dazu aus? im Turturial konnt ich es nicht raussuchen.

Im Tutorial sind fertige Funktionen! (Jetzt zum 3.ten oder 4.ten mal 
hier angeführt)

Du brauchst sie nur noch zu verwenden. Da ist auch ein Beispiel dabei, 
wie man die Funktionen verwendet.

Also noch einfacher KANN man dir die Aufgabenstellung "Auslesen eines 
ADC" nicht mehr machen. Nur: Ein wenig C müsstest du halt können. Gar 
nicht mal viel, aber wenigstens ein bischen. Und ein wenig Übung in der 
C-Programmierung auf einem AVR müsstest du haben. Gar nicht mal viel, 
aber wenigstens ein bischen.

Und nein: Du brauchst dir dort nicht raussuchen, welches Bit du in 
welchem Register zu setzen hast. Dort sind 2 Funktionen, die eine heisst 
ADC_init (na was wird die wohl machen) und die andere heisst ADC_Read 
(was wird die wohl machen). Du brauchst sie nur übernehmen und 
verwenden! Du musst da gar nichts erfinden. Wenn du sie zumindest in 
groben Zügen verstehst, ist das mehr als du brauchst. Im Grunde genommen 
reicht es, wenn du die Funktionen aufrufen kannst - mehr musst du dazu 
nicht können! Und selbst das ist in einem simplen main()-Beispiel 
gezeigt.

Oder anders gefagt:
Welchen Teil in ...
1
int main()
2
{
3
  uint16_t adcval;
4
  ADC_Init();
5
 
6
  while( 1 ) {
7
    adcval = ADC_Read(0);  // Kanal 0
8
    // mach was mit adcval
9
 
10
  }
11
}
... verstehst du nicht? Denn das ist alles was du verstehen musst und 
womit du weiterarbeitest. Die beiden Funktionen, die übernimmst du 
einfach aus dem Tutorial! Eventuell passt du höchstens noch die 
Einstellung der Referenzspannung an. Aber mehr brauchst du nicht tun, um 
einen funktionierenden ADC zu haben.

Die nächste Stufe der Hilfe besteht dann schon darin, dass jemand zu dir 
hinfährt und den Code höchstpersönlich bei dir eintippt.
OP #2044907
Lesenswert?

1
//Globale Variablen
2
uint8_t LDR1, LDR2, LDR3, LDR4; 
3
// unsignd integer 8Bit, 
4
ISR (ADC_vect)  {LDR1 = ADCH;}
5

6
int main (void)
7
{
8
  
9
ADCSRA |= (1<<ADEN);  //ADC aktivieren
10
ADCSRA |= (1<<ADSC);  //Start convesion
11
ADCSRA |= (1<<ADFR);  //Dauernd aktivierent
12
ADCSRA |= (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
13
ADCSRA |= (1<<ADIE);
14

15
ADMUX = (1<<ADLAR);
16

17

18
//ADCSRA = 0b11101111;
19
sei();
20

21
while (1)
22
{    LDR1 = ADC_Read(0);
23
  LDR2 = ADC_Read(1);
24
  LDR3 = ADC_Read(2);
25
  LDR4 = ADC_Read(3);

jetzt kann ich mit den werten arbeiten?
habe oben ISR aber unten was anderes hää?
tut mir leid programmiere seit paar monaten erst
#2044924
Lesenswert?

Siehst du im Tutorialsbeispiel irgendwo eine ISR?
Nein. Also, wozu hast du dann so etwas ähnliches wie eine ISR
eingeführt? Und was war jetzt so schlimm den Teil im ADC_Init einfach
beieinander zu lassen?

> tut mir leid programmiere seit paar monaten erst

Dann wärst du gut beraten, wenn du nicht ständig dein eigenes Süppchen
kochen würdest, sondern dir die Ratschläge der Erfahreneren zu Herzen
nimmst und sie ganz einfach befolgst.

LASS DIE FINGER VON INTERRUPTS, WENN DU SIE NICHT BEHERRSCHT.

Und das tust du ganz offensichtlich nicht. Noch nicht einmal 
ansatzweise.
#2044941
Lesenswert?

Was ist falsch an
1
//Globale Variablen
2
uint16_t LDR1, LDR2, LDR3, LDR4; 
3

4
int main (void)
5
{
6
  ADC_Init();
7

8
  while (1)
9
  {
10
    LDR1 = ADC_Read(0);
11
    LDR2 = ADC_Read(1);
12
    LDR3 = ADC_Read(2);
13
    LDR4 = ADC_Read(3); 
14

15
    if( LDR1 > LDR2 )
16
    {
17
       ...
18
    }
19
  }
20
}

Ist dir das zu einfach, zu simpel, zu banal oder was?
Möchtest du das jetzt auf Teufel komm raus pimpen und komplexer machen 
oder wie?
OP #2046169
Lesenswert?

bekomme dauernd den fehler hier "HBFI09b-IO1.c:41: undefined reference 
to `ADC_Init'"
1
// Header-Dateien für Preprozessor
2
#define F_CPU 3686400UL
3
#include <util/delay.h>
4
#include <avr\io.h>    // Pin-Definitionen
5
#include <stdint.h>    // div. int-Datentypen
6
#include <avr/interrupt.h>
7
// ausgelagerte Makros in eine Header-Datei BitMask
8
//#include <\avr\Programme\BitMask.h>    
9
  // Schreibweise: Register Makroname Bitposition )
10

11

12

13
//Konstantendeklaration, Reihenfolgen nach AVR-Board
14
//Port-D: Eingänge
15
//const uint8_t Taster1_D    = PD2;  //PinTaster1
16
//const uint8_t Taster2_D  = PD3;
17
//const uint8_t Festpegel1_D= PD4;
18
//const uint8_t Festpegel2_D= PD5;
19
//const           = PD6;
20
//const           = PD7;
21

22
//Port-B: Ausgänge
23
//const uint8_t LEDrot_B    = PB0;  //inv. Wert von Taster1
24
const uint8_t LEDgelb_B   = PB1;  //inv. Wert von Taster2
25
const uint8_t LEDgruen_B  = PB2;  //Funktionswert
26
//const           = PB3;
27
//const            = PB4;
28
//const            = PB5;
29

30
//Port-C
31
//const           = PC0;
32
//const            = PC1;
33
//const            = PC2;
34
//const           = PC3;
35
//const            = PC4;
36
//const uint8_t LEDgruen_C  = PC5;
37

38
//Globale Variablen
39
uint8_t LDR1, LDR2, LDR3, LDR4;
40

41
int main (void)
42
{
43
  ADC_Init();
44

45
  while (1)
46
  {
47
    LDR1 = ADC_Read(0);
48
    LDR2 = ADC_Read(1);
49
    LDR3 = ADC_Read(2);
50
    LDR4 = ADC_Read(3);
51

52
    if( LDR1 > LDR2 )
53
    { 
54
    PORTB |= (1<<LEDgruen_B);
55
    }
56
    if( LDR1 < LDR2 )
57
    {
58
    PORTB |= (1<<LEDgelb_B);
59
    }
60
  }
61
}
#2046255
Lesenswert?

Sorry, aber hier muss ich mal ne Lanze für BASCOM AVR brechen.

Jürgen schau Dir mal die Basic Programmierumgebung namens
Bascom an, da wirst Du recht einfach und schnell zum Ziel
kommen.

Damit kannst Du einfach per

"config adc" den AD-Wandler initialisieren

und per "getadc(x)" denselbigen kanalweise auslesen

Für Deine Anwendung reicht auch die freie Demoversion
noch locker aus.
#2046270
Lesenswert?

Jürgen Schmitt schrieb:
> bekomme dauernd den fehler hier "HBFI09b-IO1.c:41: undefined reference
> to `ADC_Init'"

Klar.
In deinem Code gibt es ja auch keine Funktion ADC_Init. Und auch keine 
Funktion ADC_Read.

Aber im Tutorial gibt es sie.
Also geh zum Tutorial. Such dir den Abschnitt, markier dort den Text in 
dem die beiden Funktionen ausprogrammiert sind, dürck auf Strg-C (für 
kopieren), dann gehts du in deinen Programmtext, setzt den Cursor an 
eine geeignete Stelle (Achtung: Funktionen kann man nicht überall 
einsetzen) und drückst Strg+V für "Einsetzen".
Und schon hast du den Quelltext der beiden Funktionen auch in deinem 
Code. Damit gibt es dann bei dir plötzlich die beiden Funktionen und du 
kannst sie auch verwenden.

Und nächstes mal nimmst du dir kein Schulprojekt mehr, bei dem du hinten 
und vorne nicht weiter weißt.
#2046273
Lesenswert?

Fhutdhb Ufzjjuz schrieb:
> Sorry, aber hier muss ich mal ne Lanze für BASCOM AVR brechen.

Das hat mit BASCOM oder C erst mal herzlich wenig zu tun.

Es geht wieder mal darum, dass jemand den Mund zu voll genommen hat und 
ein Projekt angefangen hat, ohne das geringste dafür notwendige 
Basiswissen zu besitzen.

In BASCOM würde er genauso anstehen, weil er ganz einfach die Doku nicht 
gelesen hätte. Genausowenig wie er ein C-Buch für die primitivsten 
Grundlagen gelesen hat oder geschweige denn vielleicht mal ein paar 
Vorversuche für die einfachsten Dinge gemacht hätte und sich so aus dem 
Sumpf gezogen hat. Ich wage die Behauptung: er hat noch nie irgendein 
Programm für einen µC geschrieben. Sieh dir sein Programm an, wie er LED 
behandelt. Hätte er je mit einem Taster eine LED ein/aus geschaltet, 
hätte er sich gemerkt, dass LED's auch irgendwo wieder ausgeschaltet 
werden müssen. Siehst du in seinem Code irgendetwas in diese Richtung?
Gast #2046277
Lesenswert?

Karl Heinz und auch Jürgen, ich bewundere euere Geduld.

Wen ich nicht verstehe, das ist der Lehrer, der das Schulprojekt 
betreut. Ich bin bis jetzt davon ausgegangen, daß ein Ausbilder das 
Thema, das er vermitteln möchte eigentlich selber umfassend behrrscht 
und auch vermitteln kann. Wenn so etwas wie hier zu sehen der Alltag an 
der heutigen Schule ist, so erklärt es einiges zu den schlechten Pisa 
und sonstigen Ergebnissen.
#2046321
Lesenswert?

wobei ich mich immer frage ob es die Lehrer oder doch die Schüler sind. 
Bei einer Fortbildung meinerseits saßen auch noch 20 andere in der 
Klasse und hatten nichts besseres zu tun als 1 Jahr lang jeden Tag mit 
Windows Karten zu spielen. Tja so sahen dann auch deren Klausuren aus.5 
setzen !
#2046335
Lesenswert?

Grrrrr
1
uint8_t LDR1, LDR2, LDR3, LDR4;

uint8_t !

Ich hab nicht explizit darauf hingewiesen, aber das hab ich ihm weiter 
oben schon mal korrigiert.

Ist ja auch so wahnsinnig sinnig einen 10 Bit Wert in einer 8 Bit 
Variablen unterzubringen.

Passt genau zu dem was Stephan sagt: nach einem Semester sind selbst die 
einfachsten Dinge immer noch eine unüberwindliche Hürde.

Ein interessierter Bastler macht so ein Projekt an einem Nachmittag. Und 
das ganz ohne Stress. Hier wird seit 14 Tagen daran rumgehampelt und ein 
Ende ist noch lange nicht in Sicht. An einem Projekt das aus dem 
Vergleichen von jeweils 2 Zahlen und ein/ausschalten von Motoren 
besteht.
Und das soll ein Abschlussprojekt sein? Abschluss wofür? Was soll durch 
diesen Abschluss dokumentiert werden?

(Sorry, aber manchmal muss ich mir auch Luft machen)
OP #2046339
Lesenswert?

der karl heinz hat es ganz anders beschrieben. Dachte so würde es 
funktunieren. Kann ich nicht einfach eine Bibliothek aufrufen? wie löse 
ich das mit AVR_Init jetzt genau :S


LED ein aus versteh ich. Uns wurde nur per taster ein ausschalten von 
LEDs gelehrt. Und das Projekt einfach gegeben.
Und jeder fängt mal von anfang an an. Bin erst seit Monaten dabei.
#2046341
Lesenswert?

Jürgen Schmitt schrieb:
> der karl heinz hat es ganz anders beschrieben. Dachte so würde es
> funktunieren. Kann ich nicht einfach eine Bibliothek aufrufen? wie löse
> ich das mit AVR_Init jetzt genau :S

Beitrag "Re: komme mit dem A/D-Wandler vom Atmega8 nicht klar. (Sonnennachführung, Spannungen vergleichen)"

einfach den Text der Funktionen in deinen Quelltext reinkopieren.
Das einfachste von der Welt.

Aber ich hab schön langsam den Verdacht, du weißt gar nicht was 
Funktionen sind. Das erklärt auch, warum du dich von Anfang so dagegen 
gesträubt hast, die Funktionen aus dem Tut zu benutzen.
Gast #2046364
Lesenswert?

Stephan Henning schrieb:
> Bei einer Fortbildung meinerseits saßen auch noch 20 andere in der
> Klasse und hatten nichts besseres zu tun als 1 Jahr lang jeden Tag mit
> Windows Karten zu spielen.
So ähnlich dürfte es hier auch aussehen: fauler Schüler. Leider schaffen 
die es immer wieder sich hier ihre Hausaufgaben machen zu lassen, ich 
würde den Fred in die Tonne kippen oder zumachen und den TO KRÄFTIG auf 
die Schnauze fallen lassen. Dann hat er was gelernt.
OP #2046390
Lesenswert?

Hab ich gemacht, dann wurde mmir gesagt:"Warum benutzt du ein Interupt?" 
mach es doch so. Dann bin ich auf das Problem mit AVR_Init gestoßen. 
Habe den Quellcode dafür rauskopiert. Mein Programm zeigt keine Fehler 
an. Cool, Board angeschlossen. Alles verkabelt. Statt LDR Pottis 
verwendet. Aber keine Funktion.
Gast #2046394
Lesenswert?

Jürgen Schmitt schrieb:
> Hast direkt alles gewusst. Auch nie Probleme gehabt. Oder mal gehabt
> nachgefragt. Die Lösung bekommen, aber nicht die Lösung verstanden.
Ich war selbstständig (und bin es noch).
Datenblätter lesen (ggf. mit Wörterbuch), Application Notes (wenns 
komplizierter wird), Tutorials durcharbeiten, GOOGELN (ich wette dass 
99,99% aller Anfängerfragen schon beantwortet wurden, hier im Forum oder 
anderswo) usw.

*Nicht*: Hallo, ich hab keine Ahnung, war in der Schule ein fauler Sack, 
bin es immer noch und muss jetzt... Wie geht dass?

Tut schrieb:
> Hast du dir eigentlich schon das AVR-GCC-Tutorial (auf das dich schon
> die ganze Zeit Leute verweisen) durchgelesen und auch durchgearbeitet?
Ich wette nein.
#2046407
Lesenswert?

Jürgen Schmitt schrieb:

> Habe den Quellcode dafür rauskopiert.

Und wo ist das in deinem zuletzt geposteten Programm?
Das letzt von dir gepostete Programm lässt sich nicht korrekt erstellen. 
Ist das jetzt endlich erledigt?


> Mein Programm zeigt keine Fehler
> an. Cool, Board angeschlossen. Alles verkabelt. Statt LDR Pottis
> verwendet. Aber keine Funktion.

Das kann jetzt vieles sein.
Angefangen von falscher Verkabelung bis zu falscher Auswertung, bis zu 
falsch eingestellter Referenzspannung bis zu falsches Programm auf den 
µC geflasht.
Gast #2046428
Lesenswert?

>Für euch ist das ja eine Sache von 10min. Bin noch ein Schüler so viel
>habe ich nicht. :D Und brauche ja nur den Teil. Wert rein Wert raus. So
>weit bis ich mit 4 Variabeln weiter arbeiten kann.

>10min. also 60€/6=10€ :)

Aufgrund dieser Attitüde steigt der Stundensatz schon mal auf 360€.

10min. also 360€/6=60€ :)
Gast #2046440
Lesenswert?

Hallo Jürgen.

Versteh ich das hier richtig:

Du versuchst hier gleichzeitig
- Programmierung überhaupt (Problemanalyse, Lösungswege)
- C Programmierung (Sprache, Compilerbedienung, Programm- und 
Dateiaufbau) zu lernen,
- Microcontroller-Programmierung (Den Code auf dem Chip zu bekommen und 
laufen zu lassen sowie Microcontroller-spezifische Funktionsweisen) zu 
lernen,
- Grundlagen analoger Schaltungstechnik (Spannungsteiler an 
Widerständen) zu lernen,
- und zum Schluß noch Leistungselektronik (soll ja dann mal ein Motor 
angesteuert werden) zu lernen.

Das ist ganz schön viel auf einmal.

Oder sehe ich das jetzt falssch? Welche Erfahrungen mit diesen Themen 
konntest Du denn schon sammeln. Vielleicht postest Du hier mal was Du in 
diesen Bereichen schon gemacht hast, dann wissen die hilfsbereiten 
Forenteilnehmer wo sie ansetzen können.
#2046450
Lesenswert?

alle Tage wieder schrieb:
>>Bin noch ein Schüler
> Das wissen wir mittlerweile.
>
>>10min. also 60€/6=10€ :)
> Du bist vielleicht naiv...

Allerdings.
Denn wenn das so einfach wäre könnte das ja jeder.
Aber ich lass mir natürlich auch die Stunden zahlen, die ich gebraucht 
habe um dorthin zu kommen, dass ich das in 10 Minuten machen kann.

Daher: Das kannst du dir nicht leisten, da einen Profi anzuheuern.
Entweder selber lernen oder es wird teuer.

Ist bei einem Handwerker auch nicht anders.
OP #2046451
Lesenswert?

Dieswegen bin ich auch durcheinander. Ist ein Auftrag ohne Grundwissen.

Habe meine Konstruktion fertig. Alles auch verschaltet. Von meinem MC 
aus 5V drauf gegeben. Dann 4 Leitungen jeweils in einen Eingang vom MC 
also PORT-c 0,1,2,3
Habe auch die Motorsteuerung fertig. 4Ausgäne Steuersignale vom MC. 
PORT-d 1(links) 2(rechts) usw.
Muss halt vom Eingang die Signale In Digitale. Brauche auch keine 
Auswertung sondern nur einen vergleich. Oben ist gepostet der Code.
Gast #2046464
Lesenswert?

>Ist ein Auftrag ohne Grundwissen.

Das ist doch ganz einfach. Wenn Du aufgrund der Einträge im Klassenbuch 
nachweisen kannst, das die notwendigen Grundlagen noch nicht vermittelt 
worden sind, dann darf man Dir auch keine 5 geben, es sei denn Du bist 
aufgefordert worden Dir das Wissen per Hausarbeit selbst anzueignen.
Sonst musst Du die Kröte (die 5) halt schlucken.

>Brauche auch keine Auswertung sondern nur einen vergleich. Oben ist >gepostet der 
Code.

Du hast den Code schon! Jetzt ist mal gut.
#2046466
Lesenswert?

Karl heinz Buchegger schrieb:
> Jürgen Schmitt schrieb:
>> Dieswegen bin ich auch durcheinander. Ist ein Auftrag ohne Grundwissen.
>>
>> Habe meine Konstruktion fertig. Alles auch verschaltet.
>
> Und das sieht elektronisch wie aus?

Damit da kein Missverständnis entsteht:
Wie der Motor angeschlossen ist, interessiert noch nicht.
Es geht einzig und alleine um die 4 ADC Eingänge.

Wie sind die verschaltet (Aufpassen: wie SIND die momentan verschaltet, 
nicht wie SOLLTEN sie verschaltet sein, wenn dann einmal LDR da drann 
sind) und wie sieht das Auswerteprogramm jetzt aus.
Gast #2046468
Lesenswert?

Stephan Henning schrieb:
> @Karl Heinz
> bin mal gespannt wie lange Du noch Geduld hast.
Ich hoffe nicht mehr lange. Nicht weil ich Karl Heinz einen 
Nervenzusammenbruch wünsche, bloss nicht!!!, aber ich würde mich freuen 
wenn der TO keine Hilfe bekommt und mal die Folgen seiner Faulheit zu 
spüren bekommt. Hoffenlich ist der Name echt, der Lehrer nutzt Google 
und findet diesen Fred.

Huch schrieb:
> Jetzt ist mal gut.
ack

Ich versuchs nochmal: ZUMACHEN!
#2046470
Lesenswert?

Huch schrieb:

> Du hast den Code schon!

Das traurige ist: Getreu dem Forenmotto rücken wir in solchen Fällen den 
Code nicht komplett raus. Aber er kriegt den Hinweis, wo er ihn herholen 
kann um ihn an seine Bedürfnisse anzupassen.
Und dann klappt noch nicht mal das Kopieren einer Codequelle.
Kopfschüttel.


Weiter oben war ich anscheinend schon prophetisch, als ich prophezeit 
habe, dass jemand zu ihm fahren und die Tasten drücken müss.
Gast #2046487
Lesenswert?

Ich frag mich manchmal wie es dem armen Menschen gegangen ist, der meine 
Anfängerfragen beantworten musste.
Ich kam da mit meinem riesen Ausdruck vom PET-Basic an und wollte wissen 
wieso da ein JSR gerade vor nem String kam.
Oder die stundenlangen Sitzungen am Nollendorfplatz. Der einzige 
Elektronikladen in dem man die englischen Bücher bekam und in Englisch 
war ich ne Niete.

Ach warn das noch Zeiten. Irgendwann haben wir uns in Assembler Witze 
erzählt. Naja. Ich werd wohl alt.
#2046489
Lesenswert?

Stephan Henning schrieb:
> soll ich raten ? Der Mittelabgriff vom Poti hängt in der Luft. :-)

:-)
Genau darauf will ich hinaus :-)

Aber dem Kerl ist ja keine Information zu entlocken. Wegen jedem Müll 
muss man 5 mal nachfragen.
Eigentlich sollte man meinen, dass jemand der in Schwierigkeiten ist, 
alles daran setzt, kooperativ zu sein.

Das aktuelle Programm steht auch noch aus.
#2046493
Lesenswert?

Jürgen Schmitt schrieb:
> jetzt habe ich LDRs dran.
>
> Aber prinzipiell sind die ja gleich. oder nicht? Haupsache richtig
> verschaltet.

Poti wäre schon in Ordnung, wenn du es richtig eingbaut hast.

Bei LDR erhebt sich sofort die Frage: Wie gross hast du den anderen 
Widerstand gemacht und hast du mal nachgemessen, was die Spannung an den 
ADC Eingängen für Werte hat?


Poti wäre insofern besser, weil man da einfach eine Spannung einstellt 
und dann hat man was reproduzierbares. Bei LDR ist das immer so eine 
Sache ob man mit der Hand reproduzierbar die gleiche Abschattung 
hinkriegt.

Poti so in der Größenordnung von 10k. Ob das 4.7k oder 15k sind spielt 
nicht die große Rolle, 1MOhm hingegen wäre schon etwas zu viel.


Was macht das Programm?
#2046494
Lesenswert?

Huch schrieb:
> Ich frag mich manchmal wie es dem armen Menschen gegangen ist, der meine
> Anfängerfragen beantworten musste.
> Ich kam da mit meinem riesen Ausdruck vom PET-Basic an und wollte wissen
> wieso da ein JSR gerade vor nem String kam.
> Oder die stundenlangen Sitzungen am Nollendorfplatz. Der einzige
> Elektronikladen in dem man die englischen Bücher bekam und in Englisch
> war ich ne Niete.
>
> Ach warn das noch Zeiten. Irgendwann haben wir uns in Assembler Witze
> erzählt. Naja. Ich werd wohl alt.

vor 20 Jahren gabs kein Forum wo wir fragen konnten. ASM haben wir 
trotzdem gelernt. Nur C kriege ich einfach nicht hin. (habs auch nie 
vermisst)
#2046495
Lesenswert?

Ich hab aufmerksam mitgelesen. Und jetzt muß ich sagen: ich fänd es 
nicht ganz "fair", wenn dieser Thread offen gelassen wird. Es gibt echt 
viele Leute, die auch mit Grundlagen ihre Probleme haben/hatten. Und 
denen wurde es auch immer überlassen, sich da selbst schlau zu machen. 
Das war bei mir so und bei 1000en anderen auch.
Der TO hat alle Informationen erhalten, die er zur Lösung der Aufgabe 
braucht. Ihm fehlt es an den allertiefsten Grundlagen. Wenn hier weiter 
"geholfen" wird, dann darf sich NIENIENIE wieder hier über faule Schüler 
beschwert werden. Es wäre nicht fair gegenüber den Leuten, die sich 
selbst etwas erarbeiten...
Ich würde mein Kind auf die Schnauze fallen lassen, und zur Strafe für 
die 5 das Taschengeld kürzen -> Lerneffekt.

Sorry...
#2046501
Lesenswert?

OK

D.h. die Spannungen sind anscheinend soweit in Ordnung. Du hast 
heffentlich auch direkt am µC Pin gemessen. Nicht dass da irgendwo ein 
Kabel in der Luft hängt. Direkt am µC Pin messen ist das sicherste um 
all die kleinen Fehlerchen auszuschliessen und zu detektieren.

Also: Jetziges Programm, wie siehts aus.
Und zwar komplett!
Gast #2046504
Lesenswert?

Joachim B. schrieb:
> Ich hab aufmerksam mitgelesen. Und jetzt muß ich sagen: ich fänd es
> nicht ganz "fair", wenn dieser Thread offen gelassen wird. Es gibt echt
> viele Leute, die auch mit Grundlagen ihre Probleme haben/hatten. Und
> denen wurde es auch immer überlassen, sich da selbst schlau zu machen.
> Das war bei mir so und bei 1000en anderen auch.
> Der TO hat alle Informationen erhalten, die er zur Lösung der Aufgabe
> braucht. Ihm fehlt es an den allertiefsten Grundlagen. Wenn hier weiter
> "geholfen" wird, dann darf sich NIENIENIE wieder hier über faule Schüler
> beschwert werden. Es wäre nicht fair gegenüber den Leuten, die sich
> selbst etwas erarbeiten...
> Ich würde mein Kind auf die Schnauze fallen lassen, und zur Strafe für
> die 5 das Taschengeld kürzen -> Lerneffekt.
>
> Sorry...

Danke, besser hätte ich es nicht formulieren können.
Da gab es erst kürzlich einen Fred zu solchen Fällen und trotzdem wird 
weiterhin die Arbeit für andere erledigt. :-(

MACHT ENDLICH DICHT HIER!
#2046578
Lesenswert?

Karl Heinz ich bewundere deine Geduld immer wieder :)


Jürgen Schmitt schrieb:
> Hat sich nichts geândert. Ausem
> turturial raus kopiert und getestet und wieder weg

was heißt wieder weg? Die Funktionen sollten schon im code drin bleiben.

Was ich Persönlich nicht verstehen kann, wieso du die Leute nicht 
unterstützst die dir helfen wollen.

Zeig, sobald du kannst, doch einfach mal dein aktuelles Programm.

Grüße
Chris
OP #2046819
Lesenswert?

1
// Header-Dateien für Preprozessor
2
#define F_CPU 3686400UL
3
#include <util/delay.h>
4
#include <avr\io.h>    // Pin-Definitionen
5
#include <stdint.h>    // div. int-Datentypen
6
#include <avr/interrupt.h>
7
// ausgelagerte Makros in eine Header-Datei BitMask
8
//#include <\avr\Programme\BitMask.h>    
9
  // Schreibweise: Register Makroname Bitposition )
10

11

12

13
//Konstantendeklaration, Reihenfolgen nach AVR-Board
14
//Port-D: Eingänge
15
//const uint8_t Taster1_D    = PD2;  //PinTaster1
16
//const uint8_t Taster2_D  = PD3;
17
//const uint8_t Festpegel1_D= PD4;
18
//const uint8_t Festpegel2_D= PD5;
19
//const           = PD6;
20
//const           = PD7;
21

22
//Port-B: Ausgänge
23
//const uint8_t LEDrot_B    = PB0;  //inv. Wert von Taster1
24
const uint8_t LEDgelb_B   = PB1;  //inv. Wert von Taster2
25
const uint8_t LEDgruen_B  = PB2;  //Funktionswert
26
const uint8_t LEDrot_B    = PB3;
27
//const            = PB4;
28
//const            = PB5;
29

30
//Port-C
31
//const           = PC0;
32
//const            = PC1;
33
//const            = PC2;
34
//const           = PC3;
35
//const            = PC4;
36
//const uint8_t LEDgruen_C  = PC5;
37

38
//Globale Variablen
39
uint16_t LDR1, LDR2, LDR3, LDR4;
40

41
void ADC_Init(void) {
42
 
43
  uint16_t result;
44
  ADCSRA |= (1<<ADEN);                  // ADC aktivieren
45
 
46
  /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest
47
     also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */
48
 
49
  ADCSRA |= (1<<ADSC);                  // eine ADC-Wandlung 
50
  while (ADCSRA & (1<<ADSC) ) {}        // auf Abschluss der Konvertierung warten
51
  /* ADCW muss einmal gelesen werden, sonst wird Ergebnis der nächsten
52
     Wandlung nicht übernommen. */
53
  result = ADCW;
54
}
55
 
56
/* ADC Einzelmessung */
57
uint16_t ADC_Read( uint8_t channel )
58
{
59
  // Kanal waehlen, ohne andere Bits zu beeinflußen
60
  ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
61
  ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
62
  while (ADCSRA & (1<<ADSC) ) {}  // auf Abschluss der Konvertierung warten
63
  return ADCW;                    // ADC auslesen und zurückgeben
64
}
65

66
int main (void)
67
{
68
  ADC_Init();
69

70
  while (1)
71
  {
72
    LDR1 = ADC_Read(0);
73
    LDR2 = ADC_Read(1);
74
    LDR3 = ADC_Read(2);
75
    LDR4 = ADC_Read(3);
76

77
    if( LDR1 > LDR2 )
78
    { 
79
    PORTB |= (1<<LEDgruen_B);
80
    }
81
    if( LDR1 < LDR2 )
82
    {
83
    PORTB |= (1<<LEDgelb_B);
84
    }
85
  }
86
}
das hier hab ich
#2046874
Lesenswert?

Wenn ich mir die ADC_Init aus dem Tutorial ansehe, dann sehe ich aber 
ganz was anderes
1
/* ADC initialisieren */
2
void ADC_Init(void) {
3
 
4
  uint16_t result;
5
 
6
//  ADMUX = (0<<REFS1) | (1<<REFS0);      // AVcc als Referenz benutzen
7
  ADMUX = (1<<REFS1) | (1<<REFS0);      // interne Referenzspannung nutzen
8
  ADCSRA = (1<<ADPS1) | (1<<ADPS0);     // Frequenzvorteiler
9
  ADCSRA |= (1<<ADEN);                  // ADC aktivieren
10
 
11
  /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest
12
     also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */
13
 
14
  ADCSRA |= (1<<ADSC);                  // eine ADC-Wandlung 
15
  while (ADCSRA & (1<<ADSC) ) {}        // auf Abschluss der Konvertierung warten
16
  /* ADCW muss einmal gelesen werden, sonst wird Ergebnis der nächsten
17
     Wandlung nicht übernommen. */
18
  result = ADCW;
19
}

da ist die Einstellung der Referenzspannung drinnen, da ist die 
Einstellung des Frequenzvorteilers drinnen.

All das hast du rausgeworfen und dann wunderst du dich, warum dein ADC 
nicht korrekt arbeitet? Die Dinge stehen doch nicht einfach so zum Spass 
in den Tutorialsroutinen drinnen!

(Für deinen Fall willst du wahrscheinlich AVcc als Referenzspannung 
nehmen. Daher: Die erste der beiden Einstellungen entkommentieren und 
dafür die andere für die interne Referenzspannung unter Kommentar 
setzen)
OP #2046971
Lesenswert?

Ok habs verstnden mit referenzspannung. Die lde s sind als ddrb 
definiert.
Wenn ich die if funktionen noch richtig mache also if wenn so und so 
dann leuxhte wenn nicht also else leute nicht.. Dann müsste es 
funktunieren.
Versuche mein avr studio zum laufen zu bringen dann meld ich mich noch 
mal.
Danke für die hilfe und geduld :)
#2046985
Lesenswert?

Jürgen Schmitt schrieb:

> Wenn ich die if funktionen noch richtig mache also if wenn so und so
> dann leuxhte wenn nicht also else leute nicht.. Dann müsste es
> funktunieren.

Nein.
Denn du musst den Portpin an dem die LED hängt auch noch auf Output 
konfigurieren.

Die Details dazu finden sich im Datenblatt bzw., wer hätte das gedacht, 
im Tutorial
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Zugriff_auf_IO-Ports

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