Hallo,
ich bin momentan an einem kleinen Projekt dran. Es geht um eine
Temperaturmessung mit dem KTY81/110. Ich habe als Anhang ein Screenshot
von unserem Programm und dem Schaltplan gemacht. So nun zu meiner Frage
und zwar wollte ich wissen wieso ich das Lcd nicht beschreiben kann mit
meinem Programm.
Sobald ich einen kurzen Test mache und ein paar Buchstaben anstatt der
Temperatur schicke funktioniert alles. Kann mir eventuell einer von euch
einen Tipp geben oder eine Lösung?
Mit freundlichen Grüßen
Max M.
Max M. schrieb:> Ich habe als Anhang ein Screenshot von unserem Programm
Warum nur? Was ist so schwierig daran, das als Text zu kopieren und zu
posten?
> Max M. schrieb:>> Ich habe als Anhang ein Screenshot von unserem Programm>> Warum nur? Was ist so schwierig daran, das als Text zu kopieren und zu> posten?
Exakt.
Ich seh zwar einige Probleme im Code, unter anderem auch das für dein
Problem verantwortliche, aber ich bin zu faul da jetzt mit 3 Fenstern zu
arbeiten um den Code abzutippen. Häng dein C File ganz einfach als
Attachment an und gut ists. Dann kann sich jeder mit Copy&Paste die
relevanten Stellen raukopieren und dir gezielt helfen.
So bleibt mir nur: sieh dir die Zeile an, in der du das ADSC Bit setzen
solltest. Du tust das nicht. Da wird kein Bit in ADCSRA gesetzt.
Und die Zeile in der du ADMUX besetzt ist auch fehlerhaft. Hat
allerdings zum Glück für dich keine Auswirkungen.
Im übrigen schmeisst du da ja mächtig mit float und dtostrf um dich.
Hallo,
sorry ist mein 2 Post bin nicht grad der Profi, hab das File mal
drangehängt.
Ich Starte die Wandlung ja direkt vor der Schleife oder ist das nicht
möglich?
Hab mittlerweile auch eine Anzeige bekommen jedoch verändert diese sich
nicht.
Max M. schrieb:> Hallo,>> sorry ist mein 2 Post bin nicht grad der Profi, hab das File mal> drangehängt.>> Ich Starte die Wandlung ja direkt vor der Schleife oder ist das nicht> möglich?
So
1
// Wandlung starten
2
ADCSRA|=(1<<ADSC);
3
4
// warten bis fertig
5
while(ADCSRA&(1<<ADSC))
6
{
7
}
8
9
// ergebnis abholen
10
value=(ADCW+1)*(vcc/1024);
Du holst dir dein Auto ja auch erst dann aus der Werkstatt wieder ab,
wenn es fertig ist und pfuscht nicht rum, während der Mechaniker an der
Arbeit ist.
und ehe du jetzt wie ein wilder rumrechnest um dann ein falsches
Ergebnis zu erhalten: es ist nicht verboten erst mal damit anzufangen,
ganz einfach den ADC Wert auszugeben und dann die Berechnung sukzessive
Schritt für Schritt einzubauen und sich anzusehen ob die
Zwischenergebnisse stimmen.
Karl H. schrieb:> und ehe du jetzt wie ein wilder rumrechnest um dann ein falsches> Ergebnis zu erhalten: es ist nicht verboten erst mal damit anzufangen,> ganz einfach den ADC Wert auszugeben und dann die Berechnung sukzessive> Schritt für Schritt einzubauen und sich anzusehen ob die> Zwischenergebnisse stimmen.
Es ist nichts anrüchtiges dabei, erst mal damit anzufangen
dem KTY ein Feuerzeug unterzuhalten und nachzusehen ob sich die Werte
überhaupt verändern, bzw. welche Werte vom ADC kommen.
Du hast die interne Referenzspannung eingestellt. Willst du das?
Sorry hatte den Post völlig vergessen hab das Programm nochmal
überarbeitet. Temperaturmessung läuft jetzt ohne Probleme, nur ich kann
die Daten nicht per Bluetooth übertragen. Benutze das Btm 222. Hab 2
Module eines im Mastermode und eines im Slavemode. Mein Atmega 32 misst
die Temperatur und wandelt sie, dann schick der Master die Daten zum
Slave. Der 2 Atmega 32 gibt diese dann auf ein Lcd aus.
Bekomme nur folgende Zahl übermittelt 0.00 bräuchte dringest Hilfe, kenn
mich mit den Return und Wertübergabe Funktionen nich gut aus. Hab mir
viele Tutorials durchgelesen bin aber nicht wirklich schlau daraus
geworden.
Im übrigen, wenn ich mir dann auch noch den Slave Code ansehe.
Dir ist aber schon klar, dass ein float aus mehr als nur einem Byte
besteht. Oder?
Wenn du dir mit dem ganzen Zeugs unsicher bist, dann verschick doch die
Dinge nicht binär. Lass dir einen String erzeugen und verschick diesen.
Ist auch mit der ganzen Synchronisierung viel einfacher.
Wenn der Master ein
1
23.5<Return>
verchickt, dann kannst du zum Testen erst mal ein ganz normaler
Terminalprogramm verwenden, auf dem die Werte lesbar auftauchen. Da
kannst du dann testen.
Ist soweit alles in Ordnung, dann beschäftigst du dich damit, wie man
auf dem Slave eine komplette Zeile aus den eingehenden Bytes
(=Charactern) wieder zusammensetzt. Auch da gibt es im Forum genügend
Vorlagen.
Und dann musst du noch deinen String in eine tatsächliche Zahl
konvertieren, wenn du im Slave damit weiterrechnen willst.
Das vermeidet erst mal alle Protokoll-Probleme, die du beim versenden
von mehreren Bytes automatisch kriegst, weil du bei einem Bytestrom
erstmal nicht automatisch weisst, welche 4 aufeinanderfolgenden Bytes
eigentlich zusammen gehören und den float bilden. In Textform ist das
alles viel einfacher, weil du durch den <Return> automatisch einen
Trenner hast, der dir mitteilt, dass hier eine Zeile (und damit auch die
Zahl) zu Ende ist und mit dem nächsten Byte eine neue Zeile (und damit
eine neue Zahl) beginnt. Gerade Anfänger denken oft, dass binäre
Übertragung einfacher wäre, weil sie sich vor der Konvertierung in/vom
ein Textformat fürchten. Das genau Gegenteil ist der Fall. Textuelle
Übertragung hat einige Vorteile, die einem das Leben leichter machen.
Auch Profis benutzen sie gerne, wenn es keine
Geschwindigkeitslimitierungen gibt, die das etwas geschwätzigere
Textformat aus dem Rennen werfen.
>> na ja. Es wird wahrscheinlich hilfreich sein, wenn man den errechneten> Wert verschickt und nicht einfach nur den Inhalt des UDR Registers.
Entschuldigung. Da hatte ich das
1
voidUSART_SendByte(uint8_tu8Data)
2
{
3
while(!(UCSRA&(1<<UDRE)))/* warten bis Senden moeglich */
4
{
5
}
6
7
UDR=temperatur;
8
9
}
noch nicht gesehen.
Du probierst aber auch wirklich völlig unkonventionell und
unsystematisch einfach nur herum.
So ich hab nun fast fertig was ich noch wissen wollte: Ich Messe 1mal
die Temperatur und 1mal den Luxwert, dann schick ich sie per USART vom
Atmega32 zum BTM222 -> über Bluetooth zum anderen BTM222 dann an den
zweiten Atmega32.
Kann ich diese 2 Werte irgentwie auseinanderhalten?
Max M. schrieb:> So nun zu meiner Frage> und zwar wollte ich wissen wieso ich das Lcd nicht beschreiben kann mit> meinem Programm.
Wahrscheinlich weil keins angeschlossen ist, jedenfalls ist im
Schaltplan keins zu finden.
Ich hab ein bisschen rumprobiert, jedoch ein brauchbares Ergebnis
bekommen. Hab mal alles wieder so geschrieben wie ich es hatte. Hat
einer von euch eventuell einen Tipp.
Hab C nur in der Schule gelernt und wir haben da relativ simples Zeug
gemacht bin also nicht grad der Profi, will mich aber verbessern.
Ein Lcd ist angeschlossen :P
Ich hab beim Code die Luxübertragung deaktiviert da immer Fehler
aufgetreten sind aber es geht immer noch um die Übertragung von 2
Werten. Beide Werte werden immer aufs Lcd ausgeben und zwar beid er
Temperatur und bei der Licht anzeige.
Gruß
Max