- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 32

Thema: Zusammstellung: GPS + WiFi + 7-Segment 4-Digit LCD

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    40
    Beiträge
    3.416
    möchte ich auf dem Display eine Zahl zwischen 0.001 und 9999 darstellen, welche ich über einen HTTP-Aufruf bekomme
    du willst also auf dem gerät einen mikro webserver der per http-get mit parametern eine zahl entgegen nimmt und diese auf deinem 7-segment ausgibt

    Ein 7-segment hat i.d.R. 7 segmente + 1 Punkt, also 8 LEDs, die üblicherweise in einer matrix angesteuert werden und eine gemeinsame masse haben.

    Beste Lösung wäre es wenn du also 8 Pins für segmente nimmst und 4 pins für die ziffern und dann multiplexing betriebst, du benötigst also einen controller mit mindestens 12 freien portpins oder du sparst dir 7-8 pins und nimmst eines der 7 segmentanzeigen mit schieberegistern und steuert das ganze dann per I2C oder SPI an, je nachdem wo du dich noch am ehesten rantraust

    mit multiplexing meine ich, du steuerst hintereinander immer jeweils einen masse pin an, so dass immer nur eine ziffer zur selben zeit an ist und je nachdem welche ziffer an ist, schaltest du die entsprechenden segmente ein um das gewünschte zeichen darzustellen

    das durchschalten der ziffern passiert dann über eine schleife so schnell, dass das träge auge alle 4 zeichen simultan wahrnehmen kann
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    23.11.2017
    Beiträge
    14
    Zitat Zitat von Ceos Beitrag anzeigen
    du willst also auf dem gerät einen mikro webserver der per http-get mit parametern eine zahl entgegen nimmt und diese auf deinem 7-segment ausgibt
    Ganz genau. Der Serverseitige Part steht auch bereits.

    Ich bin leider elektrotechnisch nicht bewandert daher mal eine vielleicht dumme Frage: Kann ich mir die Pins mehr oder weniger aussuchen? Auf dem UNO R3 habe ich das Display gerade nach einem Tutorial zum Laufen bekommen. Jetzt würde ich das gerne auf das NodeMCU ummünzen. Und was sagst du zu den 7-Segmentern mit eigenem Mikrocontroller? (Eckstein-Link)

    Edit:
    Spricht eigentlich etwas gegen die Kombi "WeMos D1" + "ProtoShield mit Display"?

    WeMos D1: https://eckstein-shop.de/WeMos-D1-De...rduino-IDE-UNO
    ProtoShield: https://eckstein-shop.de/Arduino-Mul...d-fuer-Arduino

    Das würde mir als Anfänger die lästige Verkabelung ersparen und ist preislich denke ich im Rahmen. Was denkst du/ihr?
    Geändert von TFlow (04.12.2017 um 16:14 Uhr)

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    40
    Beiträge
    3.416
    von denen mit controller habe ich 0 plan, aber mit LED 7 segment hab ich grade auf arbeit ein projekt beendet, es sind halt 12 pins die wegfallen

    da 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
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.12.2010
    Ort
    NRW
    Beiträge
    223
    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

    Klicke auf die Grafik für eine größere Ansicht

Name:	DDBB608F-52D6-4ECF-A341-0146461AE99F.jpg
Hits:	9
Größe:	64,4 KB
ID:	33100

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    40
    Beiträge
    3.416
    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.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    23.11.2017
    Beiträge
    14
    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:
    da 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
    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 verstehe

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    40
    Beiträge
    3.416
    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

    Code:
    //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
    }
    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 umrechnet
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.12.2010
    Ort
    NRW
    Beiträge
    223
    Moin,

    is nur nen dynDNS habs gerade nochmal auf nem Vodafone Mobil probiert tut es sozusagen.
    cYa pig

Ähnliche Themen

  1. nochmal digit. Oszi JYETech 096
    Von HaWe im Forum Elektronik
    Antworten: 12
    Letzter Beitrag: 08.01.2017, 00:35
  2. Arduino Uno WiFi
    Von Holle1976 im Forum Arduino -Plattform
    Antworten: 0
    Letzter Beitrag: 04.01.2017, 17:02
  3. 8-Digit 7-Segmentanzeige am ATM128 ...der Startschuss fehlt für Code
    Von oderlachs im Forum Software, Algorithmen und KI
    Antworten: 5
    Letzter Beitrag: 15.02.2016, 09:49
  4. induktive Drehzahlsensor + digit. Anzeigegerät als Impulsnehmer
    Von Collage im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 0
    Letzter Beitrag: 03.11.2013, 20:51
  5. Suche ein LCD mit nur einem digit
    Von Tryan im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 4
    Letzter Beitrag: 14.04.2009, 17:52

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress