-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: A/D Wandler mit Byte Variable Auslesen? Attiny26

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    13.10.2006
    Ort
    Kohlenpott
    Alter
    30
    Beiträge
    263

    A/D Wandler mit Byte Variable Auslesen? Attiny26

    Anzeige

    Hallo,
    Kann es sein dass es bei Bascom zu Problemen führt sofern man einen A/D versucht mit einer Byte Variable aus zu lesen?
    Falls der Wert 255 überschreitet fängt er ja wieder bei 0 an zu zählen. Mit der Erkenntnis habe ich mein Programm auf die Byte Variable umgeschrieben (Vorher Word, braucht aber zuviel Platz) und die Syntax entsprechend angepasst. Klappt aber nicht so richtig, es kommt zu Fehlfunktionen.
    An dem Wandler wird ein Hall Sensor angeschlossen der ca 2,5V rausgibt. Wenn dieser nicht angeschlossen wird, der A/D Wandler also "in der Luft hängt" was ja nicht ganz stimmt durch den Pull-Up Widerstand sollte die Variable doch eigentlich auf 255 gesetzt werden,oder?

    Gruss

    Alex

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Kann es sein dass es bei Bascom zu Problemen führt sofern man einen A/D versucht mit einer Byte Variable aus zu lesen?
    Im Grunde nicht wenn man weiß was man macht.
    du mußt nur berücksichtigen das der AD-Wandler im AVR 10-Bittig ist.

    Es wäre hilfreich wenn du mal einen codeschnipsel von dir angibst um zu sehen wie du es machst.

    So kann ich mir nur was denken und herumraten was bei dir falsch läuft.
    Ich vermute mal das du den AD nicht richtig konfiguriert hast bzw. den falschen Teil des Ergebnisses ausliest.


    Welche Register (ADCHI/ADCL) liest du aus und wie gehst du mit ADLAR um ?


    Wie gesagt,der betreffende Codeschnipsel wäre hilfreich.
    Gruß
    Ratber

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2007
    Ort
    Kornwestheim (kWh)
    Beiträge
    1.118
    Wie wärs mit sowas:

    Code:
        ' Var ist hier ne Byte-Variable
    
    var = getadc(0) / 4  ' damit wird der 10-bittige Rückgabewert zu nem 8-bittigen. 
       ' durch 2 ist ja wie eine gesamte verschiebung in richtung der niederwertigsten bitstelle
    Gruß, AlKi

    Jeder Mensch lebt wie ein Uhrwerk, wie ein Computer programmiert...
    ==> UMPROGRAMMIEREN!

    Kubuntu

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Wenn du den GetADC ohne Konvertierung in ein Byte legst, dann nimmt er wahrscheinlich nur das niedrigste Byte - die zwei oberen Bytes werden verworfen. Das niedrige Byte ist aber nicht immer 255, denn es zählt ja weiter nach oben, macht also nur zusammen mit dem hohen Byte Sinn.

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Dafür hab ich ja "ADLAR" angesprochen.
    Gruß
    Ratber

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2007
    Ort
    Kornwestheim (kWh)
    Beiträge
    1.118
    die Variante mit dem durch 4 Teilen würde das beheben:

    da wird alles um 2 bits verschoben, die niedrigsten 2 bits fallen durch die rundung weg, damit hast du die oberen noch drin.
    Gruß, AlKi

    Jeder Mensch lebt wie ein Uhrwerk, wie ein Computer programmiert...
    ==> UMPROGRAMMIEREN!

    Kubuntu

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Is schon richtig aber warum unnötig Rechenzeit verschwenden wenn es auch einfacher geht ?

    ADLAR im ADMUX Setzen und schon wird das Ergebnis Linksbündig dargestellt.
    Man muß nur noch ADCH auslesen um sofort ohne rechnerei an das korrekte Ergebnis zu kommen.


    Bei deiner Methode mußt du erstens entweder einmal 16 bittig oder 2x 8 bittig auslesen und dann noch Rechnen.
    Bei der Rechnerei ist ein Teilen durch 4 ebenfalls zu aufwändig.
    Bei Faktoren 2^n kann man selbst da besser mit shiftoperationen arbeiten da die schneller abgearbeitet werden als Divisionen.
    Auch mit Hardwaremultiplikator und ganz besonders bei controllern ohne diesem wie zb. erwähntem Tiny26 der ja keinen hat.

    Probiers mal ruhig aus.
    Gruß
    Ratber

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    13.10.2006
    Ort
    Kohlenpott
    Alter
    30
    Beiträge
    263
    Vielen Dank für eure Hilfe.
    Habe jetzt einfach doch mit WORD Var. gearbeitet.. soviel mehr Speicherplatz frisst das nämlich gar nicht, wie mit hinterher aufgefallen ist.

    Gruss

    Alex

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Ja,jeweils ein Byte Ram und Flash mehr plus den Platz für die erste 16-bit opperation (Wiederholungen fallen ja raus)
    Gruß
    Ratber

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Platz ist ja erstmal egal... wenns eng wird muss man halt nochmal schwer nachdenken, aber sollte doch normalerweise passen...

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •