Hi,
was hälst du denn von dieser Idee, hab ich heute abend mal schnell zusammengestrickt. Oder muss es unbedingt 7 Segment sein
http://piggitux.ignorelist.com:8085/..._OLED_x264.mp4
Hi,
was hälst du denn von dieser Idee, hab ich heute abend mal schnell zusammengestrickt. Oder muss es unbedingt 7 Segment sein
http://piggitux.ignorelist.com:8085/..._OLED_x264.mp4
entweder die middlebox blockt deine seite oder deine seite mag mich nicht :P
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
Erstmal danke für die Antworten! Den 7-Segmenter habe ich mir ausgesucht, weil das Display relativ groß ist bzw. die Zahl dann auch von weiter weg gelesen werden kann.
@Ceos:
Das klingt gut! Heißt das, dass du nur ein Kabel verwendest und die Infos digital über einen Pin eingibst? Ich habe mal fett markiert, was ich nicht wirklich versteheda du arduino einsetzt sind die pins völlig egal, ich habe mir halt eine tabelle mit den segmentkombinationen für die zahlen gemacht (programmiere bare metal) und dann über den index einfach an einen port vom controller kopiert, so muss ich die beinchen nicht einzeln setzen sondern mache einfach nur eine zuweisung PORTy = digit; digit<<=1; (0b0001, 0b0010, 0b0100 und 0b1000) PORTx = lookup[0]; für eine "0" oder eben lookup[1] für eine "1", bei meiner anwendung kommt es auf geschwindigkeit an (weil industriesensor) bei dir kannst du es bauen wie es dir beliebt
bare metal, also ohne irgend ein framework, sondern mit dem befehlssatz des compilers für den entsprechenden chip
index ist der zeiger in einem array
port ist eine input output peripherie, pins werden üblicherweise in ports gruppiert die dann über register gesteuert werden ... pins pro port ist meist identisch mit der prozessor architektur, also 8bit prozessor = 8 pins pro port
das schreiben in ein register ist atomar, benötigt nur einen einzigen prozessorcycle/takt, das setzen von 8 pins gleichzeitig dauert als nur 1takt ... wenn cih jetzt einen einzelnen pin ändern möchte müsste ich das sog. "read-modify-write" verfahren nehmen, ich lese das register aus, verändere den pin meiner wahl und schreibe das register zurück ... also würde es mindestens 3 takte dauern (meist mehr wegen diversen mathematischen operationen um das richtige bit zu maskeiren und zu setzen) ... ich würde also für das einzelne setzen der pins mind. die 32fache (8*4takte) zeit brauchen
da du mit arduino ein framework benutzt kommt du garnicht erst auf einfachem wege an die register und hast eh keine chance ohne weiteres arbeiten die ports direkt zu steuern (zumal du dein framework verwirren würdest wenn du es machst)
0b0001 ist binärschreibweise, du schreibst das zahlenwort also bit für bit: 0b0001 wäre ein 4 bit wort (die fehlenden bits werden mit 0 aufgefüllt) und entspräche der zahl 1 0b0010 wäre ein 2 und 0b0011 eine 3 zum beispiel
ich habe bei meinem display quasi eine schleife die pro voller millisekunde folgendes macht
im code fehlt jetzt natürlich der part der ziffer mit dem ausgewählten digit im display korreliert und deinen eingegebenen zahlenwert in 4 ziffern umrechnetCode://uint8_t bedeutet 8bit wort ohne vorzeichen uint8_t digit = 0b0001; //startzustand erste ziffer uint8_t lookup[10]; //array mit segmentkombinationen für die ziffern 0-9 uint8_t digitmask = 0b01111; //ich maskiere die ungebrauchten bits aus, könnten ja noch andere komponenten dran hängen uint8_t zifferwert = 0; //darzustellende ziffer von 0-9, ändert sich je nach ausgewähltem digit auf dem display und deiner anwendung //das display hängt mit den segmenten an PORTx des controller und die ziffern massen jeweils an den unteren 4 bit des PORTy ... while(TRUE) //endlossschleife im controller, darf nie enden { while(!1ms_timeup) nop(); //tot schleife bis 1ms zeit abgelaufen 1khz updaterate fürs display / 4 ziffern = 250hz display refresh rate PORTy = digit; if((digit & digitmask) == 0b01000) digit = 0b0001; //zurücksetzen wenn das letzte digit erreicht ist else digit = digit << 1; //bitshift links um 1, damit wird aus 0b0001 z.b. 0b0010 oder daraus dann 0b0100 PORTx = lookup[ziffer]; //schiebt die segmentkombination die deiner darzustellenden ziffer entspricht in das register für die segmente }
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
Danke für die ausführliche Antwort. Hängen geblieben ist bei mir, dass ich den NodeMCU nicht im bare metal Stil beschreiben kann, richtig?
können ja, wollen eher nein, da braucht es erstmal ein bisschen erfahrung und genug langeweile um sich durch das datenblatt des controller zu wühlen, eine entwicklungsumgebung passend zum controller zu installieren (meist reicht eclipse für C programmierung), den compiler einzurichten ind er umgebung (ist einfacher wenn man die IDE des chip hersteller nimmt) und natürlich ein programmiergerät für den chip oder eine anleitung wie du das NodeMCU über USB flashen kannst wenn du ein eigenes binary compilierst.
ich erahne schon die vielen fragezeichen und rate erstmal zu kleineren schritten mit arduino
später suchst du dir dann mal einen blog oder ein how-to wie man eben mit hilfe von arduino eben bare-metal programmiert und das board damit bespielt, das ist etwas komplizierter und erfordert eine etwas ausschweifende anleitung
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
Haha, ok. Aber ich Suche ja eigentlich eine möglichst einfache Art, das selbst herzustellen. Ich habe dieses Teil gefunden, welches scheinbar nur 3 Steckplätze benötigt: https://eckstein-shop.de/8-Digit-LED...95-for-Arduino
Weiß du, ob das mit dem NodeMCU kompatibel ist? Damit sollte ich dann doch auf einfache Art und Weise die Zahl ausgeben können.
Moin,
is nur nen dynDNS habs gerade nochmal auf nem Vodafone Mobil probiert tut es sozusagen.
cYa pig
Lesezeichen