Forum: Mikrocontroller und Digitale Elektronik ADC Wandlung beim Atmega 8


von knut (Gast)


Angehängte Dateien:

Lesenswert?

Moin alle zusammen,

hab da ein Problem uns zwar hab ich eine Temperatur regelnde 
Lüftersteuerung mit Lcd Anzeige und 2 Temperatursensoren gebaut.
ich verwende den Atmega 8 als Sensor einen Lm 235 und ja eine selbst 
entworfenen Platine.

funktioniert auch zeigt die Temperatur richtig an nur wird bei meinem 
ersten durch lauf bei beiden Zeilen der wert des einen Temperaturfühler 
angegeben und beim 2 durch lauf der des anderen bei beiden findet von 
euch einer meinen Denkfehler im Code.

sry hab es aus versehen 2 mal an gehängt


dank schon viel Mals
Knut

von Rene K. (draconix)


Lesenswert?

Ganz ehrlich, da blicke ich net durch: :D

Erkläre mal, wo wird Sensor 1 gelesen und wo Sensor 2?
1
 Schleife1:
2
3
  B = 206                                                   'Steigung 1° = 2,06 bit mehr und da man keine Kommastellen angeben kann * 100
4
5
  C = 56300                                                 'Offset wert bei 0° hat die Schaltung 563 Bit * 100 für die Rechnung
6
7
8
9
  Lb1 = Adcl                                                'Abfrage des Lowbits
10
11
  Hb1 = Adch                                                'Abfrage des Highbits
12
13
  Hb1 = Hb1 And &B00000011                                  'Highbit mit 3 und verknüpfen um eventuele Störsignale ich ein zu Beziehen
14
15
  Hb1 = Hb1 * 256                                           'High bit * 256 um  1023 bit zu bekommen
16
17
  A = Lb1 + Hb1
18
                                                            'Variable A = Gesamt bit High- und Lowbit
19
  D = A * 100                                               'Umwandlung von A für die Berechnung der Temperatur
20
21
  Y = D - C
22
                                                            'Bitwert der Temperatur - Offset
23
  X = Y / B
24
25
   Cls
26
27
  Incr Curch
28
29
  If Curch > 1 Then Curch = 0
30
31
32
  Temp = Admux And &B11110000
33
34
  Admux = Temp Or Curch
35
36
  Lb2 = Adcl.1
37
38
  Hb2 = Adch.1                                              'Abfrage des Highbits
39
40
  Hb2 = Hb1 And &B00000011                                  'Highbit mit 3 und verknüpfen um eventuele Störsignale ich ein zu Beziehen
41
42
  Hb2 = Hb1 * 256                                           'High bit * 256 um  1023 bit zu bekommen
43
  G = Lb1 + Hb1
44
45
46
47
  H = G * 100
48
  I = H - C
49
                                               'Resultierenden Wert Y durch die Steigung B X= Temperatur
50
  J = I / B

von knut (Gast)


Lesenswert?

Sensor 1 wird an Portd.0 gelesen und Sensor 2 wird an Portd.1 gelesen

von Helfer (Gast)


Lesenswert?

> Ganz ehrlich, da blicke ich net durch: :D

Vorgeschichte:
Beitrag "LCD ansteuerung mit Atmega8"
Beitrag "ADC Vergleichen und Variable ändern"

von knut (Gast)


Lesenswert?

Helfer schrieb:
>> Ganz ehrlich, da blicke ich net durch: :D
>
> Vorgeschichte:
> Beitrag "LCD ansteuerung mit Atmega8"
> Beitrag "ADC Vergleichen und Variable ändern"

schon wieder so ein schlau Meyer der hier rumspamt

von Thomas G. (mrmp3)


Lesenswert?

Also ich kann ihn verstehen ich versteh auch nicht was du da 
programmiert hast.

Und deine Art und Weise ist auch nicht wirklich die feine Englische Art.

Er sagt dir das er es nicht versteht was du programmiert hast und du 
schreibst:

"Sensor 1 wird an Portd.0 gelesen und Sensor 2 wird an Portd.1 gelesen" 
Was soll man denn damit anfangen ?

Du erwartest doch Hilfe oder ?!

von Paul Baumann (Gast)


Lesenswert?

Die Sensoren hängen an PortD.0 und PortD.1?

Die AD-Wandler_Eingänge sitzen aber auf Port C.
Du bist doch bestimmt auf PortC.0 und PortC.1....

Der Fehler muß aber in diesen Zeilen liegen:

Incr Curch

  If Curch > 1 Then Curch = 0


  Temp = Admux And &B11110000

  Admux = Temp Or Curch

Offenbar wird nicht der richtige Wandlerkanal gewählt.

MfG Paul

von knut (Gast)


Lesenswert?

Rene K. schrieb:
> Erkläre mal, wo wird Sensor 1 gelesen und wo Sensor 2?
hab nur die Frage bentwortet

Paul Baumann schrieb:
> Die AD-Wandler_Eingänge sitzen aber auf Port C.
> Du bist doch bestimmt auf PortC.0 und PortC.1....

Jepp Sry hab mich vertippt sind an Portc.0 und Portc.1 an geschloßen

von G. M. (knut89)


Angehängte Dateien:

Lesenswert?

so hab das Problem behoben.
Man muss das
  Incr Curch

  If Curch < 1 Then Curch = 1


  Temp = Admux And &B11110000

  Admux = Temp Or Curch
 vor beide rechnungen setzen einmal so und das andere mal so
Incr Curch

  If Curch > 1 Then Curch = 0

  Temp = Admux And &B11110000

  Admux = Temp Or Curch

hatte bei mir noch einen anderen Fehler drin so hier ist der Code der 
Funtioniert.

von Karl H. (kbuchegg)


Lesenswert?

1)
  Wenn du eine Variable brauchst die abwechselnd 0 und 1 ist, dann
  it die einfachste Version

     Variable = 1 - Variable

2)
  Was soll der Müll mit den ADC Registern?
  Schon mal ins BASCOM Handbuch (Online-Hilfe) geschaut?

  In BASCOM gibt es den wunderbaren Befehl
   GETADC( Kanal )

  dein ganzes Herumgemurxe mit dem ADC (welches im übrigen sowieso
  falsch ist - du musst auch drauf warten, dass der ADC fertig ist
  ehe du dir die Wetre abholen kannst) kannst du dir sparen.
  ADC konfigurieren und GETADC benutzen!

  Aber dafür müsste man ja mal in die BASCOM Doku schauen, was
  BASCOM Neulinge ja bekanntlich nie tun, weil ja eh alles so
  einfach ist.


PS: wenn ein Programm ständig den Namen seines Programmierers ausgibt, 
dann macht sich der Programmierer damit zum Gespätt unter den Profis.

von Jüntha (Gast)


Lesenswert?

Gleich kommt der Nächste und erklärt, dass der Befehl GETADC jede Menge
Ressourcen verbraucht und man doch lieber die Register benutzen sollte.

Allen Leuten Recht getan, ist ein Kunst, die niemand kann.

Jüntha

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.