ADC Wandlung beim Atmega 8

Gast #2065340
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
Angehängte Dateien:
#2065458
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
#2065692
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 ?!
Gast #2065728
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
#2068613
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.
Angehängte Dateien:
#2068635
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.
Gast #2068683
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

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