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.
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
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.
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.
Lesezeichen