www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC Wandlung beim Atmega 8


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

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

Autor: Rene K. (draconix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ganz ehrlich, da blicke ich net durch: :D

Erkläre mal, wo wird Sensor 1 gelesen und wo Sensor 2?
 Schleife1:

  B = 206                                                   'Steigung 1° = 2,06 bit mehr und da man keine Kommastellen angeben kann * 100

  C = 56300                                                 'Offset wert bei 0° hat die Schaltung 563 Bit * 100 für die Rechnung



  Lb1 = Adcl                                                'Abfrage des Lowbits

  Hb1 = Adch                                                'Abfrage des Highbits

  Hb1 = Hb1 And &B00000011                                  'Highbit mit 3 und verknüpfen um eventuele Störsignale ich ein zu Beziehen

  Hb1 = Hb1 * 256                                           'High bit * 256 um  1023 bit zu bekommen

  A = Lb1 + Hb1
                                                            'Variable A = Gesamt bit High- und Lowbit
  D = A * 100                                               'Umwandlung von A für die Berechnung der Temperatur

  Y = D - C
                                                            'Bitwert der Temperatur - Offset
  X = Y / B

   Cls

  Incr Curch

  If Curch > 1 Then Curch = 0


  Temp = Admux And &B11110000

  Admux = Temp Or Curch

  Lb2 = Adcl.1

  Hb2 = Adch.1                                              'Abfrage des Highbits

  Hb2 = Hb1 And &B00000011                                  'Highbit mit 3 und verknüpfen um eventuele Störsignale ich ein zu Beziehen

  Hb2 = Hb1 * 256                                           'High bit * 256 um  1023 bit zu bekommen
  G = Lb1 + Hb1



  H = G * 100
  I = H - C
                                               'Resultierenden Wert Y durch die Steigung B X= Temperatur
  J = I / B

Autor: knut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sensor 1 wird an Portd.0 gelesen und Sensor 2 wird an Portd.1 gelesen

Autor: Helfer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ganz ehrlich, da blicke ich net durch: :D

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

Autor: knut (Gast)
Datum:

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

Autor: Thomas G. (mrmp3)
Datum:

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

Autor: Paul Baumann (Gast)
Datum:

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

Autor: knut (Gast)
Datum:

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

Autor: G. Matthias (knut89)
Datum:
Angehängte Dateien:

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

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

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

Autor: Jüntha (Gast)
Datum:

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

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.