Autor |
Verständnisfragen: Integer-to-Char für LCD und Dallas DS1821 (Temp.Sens.) Suche nach: lcd (4684) |
|
|
|
|
BID = 98900
austin2powers Gelegenheitsposter
Beiträge: 59
|
|
Hallo liebe Leute,
ich benutze einen ATmega8535 mit CodevisionAVR und habe ein paar kurze Fragen:
1. Muss ich zwangsläufig meine umständliche Integer-zu-Char-Umwandlung benutzen, um Int-Werte z.B. vom Temperatursensor auf einem LCD auszugeben?
Es gibt ja nur String- und Char-Output-Befehle..
Habe nämlich Schwierigkeiten mit meiner Lösung, die ich bei einer einfachen Sekundenanzeige benutzt habe (nur zum Testen), hier kurz das main (Kommentare waren für Azubi-Kollegen):
while (1)
{
sekunden++; //Sekündliche Erhöhung von sekunden um 1
delay_ms(1000);
x=1; //Zählvariablen für die Umrechnung von
i=0; //Int zu Char (String) werden initialisiert
j=0;
while(sekunden>=x) //Umrechnung von sekunden (Int) in zeit[] (Char-Array)
{
zeit[i]=((sekunden/x)%10)+0x30; //Jede einzelne Stelle der Integer-Variable wird mit
//Hex-30 addiert, denn laut ASCII-Tabelle liegt
i++; //die 0 bei Position Hex-30 und die 9 bei Hex-39.
x*=10; //Bsp. für sekunden=325 wird gespiegelt in zeit[] gespeichert: 5-2-3
}
i--;
while(j<=i) //Spiegelung von zeit[] in ausgabe[]
{
ausgabe[j]=zeit[i-j];
j++;
}
lcd_gotoxy(0,0); //LCD-Position x=0 und y=0 (oben links) wird angesteuert
lcd_putsf("Sekunden:"); //lcd_putsf wird für Ausgabe von String-KONSTANTEN verwendet
lcd_gotoxy(0,1); //LCD-Position x=0 und y=1 (unten links, 2. Zeile) wird angesteuert
lcd_puts(ausgabe); //lcd_puts wird für Ausgabe von String-VARIABLEN verwendet
};
}
Gibt es keine vorgefertigten Lösungen?
2. Falls jmd. den Dallas DS1821 kennt - ist der baugleich mit dem DS1820? In den Datenblättern und bei google äußert sich keiner dazu.. CodevisionAVR unterstützt den DS1820, aber ich habe hier den DS1821.... bisher klappt das nicht.
Evtl. liegt es aber auch an obenstehender Int-to-Char-Routine, die ich da benutzt habe.
Vielen Dank im voraus.
Viele Grüße vom fragenden
Henning
[ Diese Nachricht wurde geändert von: austin2powers am 6 Sep 2004 17:30 ]
[ Diese Nachricht wurde geändert von: austin2powers am 6 Sep 2004 17:39 ] |
|
BID = 99060
austin2powers Gelegenheitsposter
Beiträge: 59
|
|
Hallo nochmal,
die erste Frage hat sich erledigt, habe in der stdlib.h Routinen für die Umwandlung gefunden, die sogar float abdecken.
Aber der DS1821 läuft noch nicht..
Grüße,
Henning |
|
BID = 99505
austin2powers Gelegenheitsposter
Beiträge: 59
|
ok, nachdem ich den ganzen Tag gegoogelt und rumprobiert habe, kann ich nun meine behämmerte Frage konkretisieren:
Die Befehlssätze des DS1820 und DS1821 sind wohl nicht gleich.
Ich habe es allerdings auch nicht geschafft, eine DS1821.c und DS1821.h aus dem Netz zu adaptieren (Assembler-Errors en masse).
Nun möchte ich mit den im Datenblatt gegebenen Befehlen (wie READ TEMPERATURE [AAh], START CONVERT T [EEh], READ STATUS [ACh] etc.) C-Funktionen schreiben.
Sind das Assembler-Befehle..?
Wie kann ich sie benutzen?
Vielen Dank für die Aufkärung.
Grüße,
Henning
|
BID = 99563
MinceR Stammposter
Beiträge: 277
|
ich habe keine ahnung von C deshalb hab ich mal gestern abend nix gepostet. ich kann dich aber beruigen, das sind definitiv keine assembler befehle.
also wenn du mich fragst sind das die befehele die dein µC an den sensor schicken muss. also wenn dein µC AA in hex an den sensor schickt schickt er deinem µC den wert der temperatur zurück.
ich vermute mal das du zuerst start conversion schicken musst. dann fängt er an zu rödeln und xx [zeit] später kannste mit read temperatur das dann auslesen..
ist aber nur erraten, ich gucke mal ob ich daraus schlau werde, suche momentan auch einen temperatur sensor :)
|
BID = 99622
MinceR Stammposter
Beiträge: 277
|
ich weiss nicht was du für nen compiler hast, findest aber bestimmt irgendwo ne 1wire routine. dann brauchste nur aa zu senden und er schickt dir das ergebniss der temperatur. diese ist dann in 2erkomplimentär. vorausgesetzt das du vorher einmal start conversion geschickt hast. dann sollte er die ganze zeit messen und jedes mal wenn du aa schickst sie dir zurückgeben..
|
BID = 100069
austin2powers Gelegenheitsposter
Beiträge: 59
|
Moin,
ja genau, habe es auch hinbekommen - diese Hex-Befehle gehen über den 1Wire-Bus raus, also die 1wire.h includieren und dann z.B: mit w1_write(0xAA) die Codes zum Konvertierungsstart (AAh) schicken, dann Read Temp. rausgeben, so dass schließlich über "int w1_read(void);" die Temperatur ausgelesen werden kann (Hab den funktionierenden C-Code im Betrieb, könnte ich bei Interesse nächste Woche posten).
Werde mir aber wahrscheinlich demnächst doch ein paar DS1820 zulegen, da die a) wie gesagt in Codevision voll unterstützt werden und b) in 0,5°-Schritten messen (DS1821 nur 1-Grad-Schritte).
Allerdings muss ich es noch versuchen, mehrere DS1821 an den 1Wire-Bus (also an einen Pin) zu hängen und dann manuell mit den 1Wire-Hexcodes jeweils separat anzusprechen.. hab's nämlich bisher nur mit einem einzelnen getestet.
Vielen Dank für die Hilfe.
Grüße,
Henning
|
BID = 100259
MinceR Stammposter
Beiträge: 277
|
np.
so wie ichs aus dem pdf rausgelesen habe kannste bei deinem temperatur sensor nur 1 slave pro 1wire bus hängen. also quasi nur den einen sensor.
MfG MinceR
|
BID = 101063
austin2powers Gelegenheitsposter
Beiträge: 59
|
Zitat :
MinceR hat am 10 Sep 2004 16:50 geschrieben :
|
np.
so wie ichs aus dem pdf rausgelesen habe kannste bei deinem temperatur sensor nur 1 slave pro 1wire bus hängen. also quasi nur den einen sensor.
MfG MinceR
|
...und wieder ein Grund mehr für den DS18 20
Na ja, hoffentlich kann ich dann wenigstens mehr als einen Sensor benutzen, wenn ich pro Sensor jeweils einen ganzen Pin opfer.
ma' schaun..
Grüße,
Henning
|