diese info hast du uns vorenthalten! dennoch hast du nicht klar gestellt was du mit deinem 0b01111101 und dem char-wert machen willst
diese info hast du uns vorenthalten! dennoch hast du nicht klar gestellt was du mit deinem 0b01111101 und dem char-wert machen willst
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
Mir war nicht bewusst, dass das wichtig ist.diese info hast du uns vorenthalten!
Okay, ich habe einen Temperatursensor, der mir die aktuelle Temperatur in °C gibt. Dies wird in der Variable sTemp gespeichert und ändert sich, wenn die Temperatur sich ändert. Dieses sTemp hab ich getrennt, sodass wenns z.b. 23° währe, in array[0] die 2 stehen wird und in array[1] die 3 (die Werte Aktualisieren sich auch). So jetzt wollte ich die Temperatur auf der Siebensegmentanzeige anzeigen.dennoch hast du nicht klar gestellt was du mit deinem 0b01111101 und dem char-wert machen willst
Der Code funktioniert! Nur möchte ich, dass sich die ersten beiden zahlen, halt die richtige Temperatur anzeigt und sich auch ständig aktualisiert.
Code:I2CTWI_transmitByte(pcf, Anzeige1); I2CTWI_transmitByte(pcf2, Ziffer2); //zeige 2 auf erstem Display I2CTWI_transmitByte(pcf2, Aus); I2CTWI_transmitByte(pcf, Anzeige2); I2CTWI_transmitByte(pcf2, Ziffer3); //zeige 3 auf zweiten Display I2CTWI_transmitByte(pcf2, Aus); I2CTWI_transmitByte(pcf, Anzeige3); I2CTWI_transmitByte(pcf2, ZifferGr); //zeige ° auf dritten Display I2CTWI_transmitByte(pcf2, Aus); I2CTWI_transmitByte(pcf, Anzeige4); I2CTWI_transmitByte(pcf2, ZifferC); //zeige 4 auf vierten Display I2CTWI_transmitByte(pcf2, Aus);
So ich hoffe das waren genug infos.
mfG
Philip![]()
ich geh mal davon aus, dass das Auswerten des Sensor irgendwo ständig wiederholt wird, nun brauchst du die oberen beiden transmit-Blöcke nur ein eine Funktion packen, die wir z.B. "updateDisplay(char temperatur)" nennen, in welcher du die Zerlegung bewerkstelligst und anschließend mit deinen beiden transmit-tripeln auf die Segmente legst
diese Funktion rufst du nach dem auslesen der Temperatur einfach mit auf.
Oder brauchst du Hilfe beim zerlegen ?
ausgehend davon dass die temperatur IMMER 2stellig ist würd ich quick n dirty folgendes vorschlagen:
wenn deine definition von Anzeige1 - 4 nun auch noch der zahl 1-4 entspricht, kannst du auch getrost das ganze in eine Schleife packen ums schöner zu machenCode:char toDisplay[] = {'0','0','°','C'}; char temp; while(messen) { temp = getTemp(); updateDisplay(temp); } updateDisplay(char some_temp) { toDisplay[0] = some_temp/10; //nachkommastellen werden abgetrennt toDisplay[1] = some_temp- (toDisplay[0] * 10); I2CTWI_transmitByte(pcf, Anzeige1); I2CTWI_transmitByte(pcf2, toDisplay[0]); //zeige 2 auf erstem Display I2CTWI_transmitByte(pcf2, Aus); I2CTWI_transmitByte(pcf, Anzeige2); I2CTWI_transmitByte(pcf2, toDisplay[1]); //zeige 3 auf zweiten Display I2CTWI_transmitByte(pcf2, Aus); I2CTWI_transmitByte(pcf, Anzeige3); I2CTWI_transmitByte(pcf2, toDisplay[2]); //zeige ° auf dritten Display I2CTWI_transmitByte(pcf2, Aus); I2CTWI_transmitByte(pcf, Anzeige4); I2CTWI_transmitByte(pcf2, toDisplay[3]); //zeige 4 auf vierten Display I2CTWI_transmitByte(pcf2, Aus); }
PS: irgendwie mag das Forum (oder der Editor des Forum) es nicht wenn ich Text aus einem Code-Block kopiere um es in meiner Antwort zu verwenden
Geändert von Ceos (07.09.2011 um 11:58 Uhr)
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
Kann das funktionieren? Ich muss doch "0b01111101" übertragen, und nicht "2"?
undCode:#define Ziffer0 0b01000100 #define Ziffer1 0b01111101 #define Ziffer2 0b10100100 #define Ziffer3 0b00110100 #define Ziffer4 0b00011101 #define Ziffer5 0b00010110 #define Ziffer6 0b00000110 #define Ziffer7 0b01111100 #define Ziffer8 0b00000100 #define Ziffer9 0b00010100klappt nicht. So aktualisiere ich die Temp:Code:#define 2 0b10100100
Code:uint16_t adc3 = readADC(ADC_3); uint16_t sTemp = (adc3 - 316+28) / 11;
achsoooooooooooo ^_^
jetzt ist alles klar
das geht am einfachsten mit einem const char[] array
Code:const char[] Bitcodes = { 0b01000100, 0b01111101, 0b10100100, 0b00110100, 0b00011101, 0b00010110, 0b00000110, 0b01111100, 0b00000100, 0b00010100} ... Bitcodes[2] liefert den wert 0b10100100 zurück!
damit kannst du einfach über den index des array auf das entsprechende bitmuster zugreifen!
THEORETISCH kannst du Bitmuster für alle ASCII Zeichen anlegen, aber lückenlos!!! damit z.b. das kleine 'a' auch an der 97ten stelle steht! Du brauchst halt mind. 265 Bytes Programmcode mehr!
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
Mist - zu spät - gerade hatte ich fast genau das fertig getippt![]()
#define true ('/'/'/')
#define false ('-'-'-')
Fehlermeldung: SiebenSegment.c:39: error: expected identifier or '(' before '[' token
Code Z.39:
Leider klappts noch nicht so richtig ;-<Code:const char[] Bitcodes = { 0b01000100, 0b01111101, 0b10100100, 0b00110100, 0b00011101, 0b00010110, 0b00000110, 0b01111100, 0b00000100, 0b00010100 }
mfG
Philip
Lesezeichen