-         
Ergebnis 1 bis 3 von 3

Thema: DS18S20 mit ATMEGA8515

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    12.08.2004
    Beiträge
    27

    DS18S20 mit ATMEGA8515

    Anzeige

    Hallo,

    mein Ziel ist es, ein Temperatursensor (DS18S20) mit einem ATMEGA8515
    anzusteuern, und auszulesen. Dafür habe ich den Code von Felix
    genommen, und Ihn für den Prozessor mit 4MHz angepasst. Der Code ist
    logisch und ist auch einfach zu verstehen. Da ich aber neu in Sachen
    AVR Programmierung bin, und ich mich immer noch im Anfangsstadium
    befinde, habe ich noch einige Fragen:

    1. Theoretisch und Praktisch müsste der Temperaturwert im Register
    Temperatur_LSB stehen, oder?

    2. Wie kann ich die Adresse auslesen? Kann ich das mit Read, und dann
    irgendwo als *.Hex File abspeichern? Müsste der Wert dann dort stehen?

    Wenn Nein,

    3. Wie kann ich dann die Echtzeittemperatur erfahren?

    Ziel ist es, ein Temperaturwert über irgendeine Adresse binär
    auszulesen, ohne den Wert an ein LCD, oder USART auszugeben. Das kommt später. Ich möchte vorerst nur wissen, wie der aktuelle Wert ist.

    Danke für die Antworten.

    MFG

    Onur
    Angehängte Dateien Angehängte Dateien

  2. #2
    Hallo erstmal!

    Also zu 1: Da dir dieser Sensor einen Wert liefert, dessen Auflösung genauer ist als 8-Bit, Passt dieser nicht in ein Register, sondern er benötigt 2 dafür. Du findest also in "temperature_lsb" die niederwertigen 8 Bit (0-7) und in "temperature_msb" die der höheren Wertigkeit (8-...)

    2. Es wäre eine Möglichkeit, den ganzen Spaß im Eeprom abzuspeichern und das Ganze dann mit dem PC auszulesen, aber ich denke da hast du genausoschnell ein LCD angeschlossen.

    Wenn du das Ganze in Echtzeit erfahren willst und dich binär nicht stört, dann nimm dir einfach 2 freie Ports an deinem AVR(als Beispiel B und C), definiere sie als Ausgang, schließe dort 16 LEDs an (Vorwiderstand nicht vergessen) und gebe dort temperature_lsb und _msb aus.

    du musst dazu den wert mit "lds" aus dem Speicher in ein Register einlesen und ihn dann mit "out" an den Port schicken. Hab das mal kurz zusammengetippt, muss aber nicht unbedingt funktionieren


    reset:
    ldi temp1, 0 ;register und speicherstellen auf 0
    ldi temp2, 0
    ldi temp3, 0
    ldi delay1, 0
    ldi delay2, 0


    sts temperature_lsb, temp1
    sts temperature_msb, temp1
    sts TH_register, temp1
    sts TL_register, temp1
    sts res_byte4, temp1
    sts res_byte5, temp1
    sts count_remain, temp1
    sts count_per_c, temp1
    sts crc, temp1

    ldi temp1, ramend ;stack einrichten
    out spl, temp1
    ser temp1
    out ddrb, temp1 ;portb als ausgang fürs MSB
    out ddrc, temp1 ;PORT FÜRS LSB



    ;************************************************* *****************************
    ; Hauptschleife
    ;************************************************* *****************************

    main:



    rcall reset_pulse
    rcall skip_rom
    rcall convert_t
    rcall reset_pulse
    rcall skip_rom
    rcall read_scratchpad
    rcall reset_pulse ;jetzt müssten die werte in den
    ;entsprechenden speicherstellen stehen

    lds temp0, temperature_lsb ;LÄDT DAS LSB IN TEMP0
    out PORTC, temp0 ;UND GIBT ES AUF PORT C AUS

    lds temp0, temperature_msb
    out PORTB, temp0 ;und das gleich nochmal mit dem Msb

    rjmp main


    Den Rest (alles was nach main steht) einfach so lassen und nicht vergessen ganz oben bei include die richtige Datei einzubinden.
    Müsste in deinem Fall glaub ich "m8515def.inc" heißen.

    Jetzt bekommst du an PortB und PortC deinen Wert angezeigt. Er errechnet ich aus: Wert an PortB*256 + Wert an PortC.

    Hoffe das hilft dir 'n bißchen weiter

    Gruß Matthias
    Angehängte Dateien Angehängte Dateien

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    12.08.2004
    Beiträge
    27
    Hallo,

    Danke für den Tip. Mein Problem lag darin, dass ich mir nicht sicher war,
    ob eine Umwandlung stattfindet, bzw. ob überhaupt etwas passiert. Immer nach einem Schritt (Z.B. Initialisierung) habe ich die LED's vom STK500 leuchten lassen.

    Mal sehen, ob ich irgendwelche Daten ausgeben kann, oder ob ich noch Timing Probleme habe.

    Gruß

    Onur

Berechtigungen

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