-         

Seite 1 von 8 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 72

Thema: 100mm 7-Segment Stoppuhr

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    20.12.2009
    Beiträge
    86

    100mm 7-Segment Stoppuhr

    Anzeige

    Hallo,

    ich würde gerne eine Stoppuhrbauen mit 9x 100mm große 7Segment anzeigen(hh.mm.ss.ttt). Diese Anzeigen benötigen 10V und die üblichen 20mA pro Segment. Ich würde diese gerne mit einem Atmel Atmega ansteuern.
    Mittels externen Interrupt wird die Stoppuhr gestartet bzw. gestoppt.
    Meine Frage wäre nun, wie gehe ich das am Sinnvollsten an und gibt es eine elegantere Methode als 17 Transistoren auf di Platine raufzuknallen?

    LG Koertis

  2. #2
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.970
    Hallo Koertis!

    Ich kann dir nur ein Hardware-Vorschlag machen: ULN200X und/oder ULN280X Treiber.
    MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    26
    Beiträge
    1.192
    Hallo,
    im RN-Wissen hab ich vor kurzem mit dem Artikel Siebensegmentanzeigen angefangen, dort wird auch auf die Ansteuerung eingegangen: http://www.rn-wissen.de/index.php/Siebensegmentanzeige
    Es werden viele Varianten gezeigt, u.a. auch mit ULN2003, Multiplexing, Dezimalzähler, BCD-7Segment-Decoder, ...
    Das könnte schon mal eine Orientierung sein.

    Grüße, Bernhard

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    20.12.2009
    Beiträge
    86
    Super Danke,
    Die Lösung mit dem ULN2803 ist sehr verlockend, so spar ich mir schon mal die 8 bzw. 9 Transistoren(für die Kathoden), aber für die 8 Segmente werde ich wohl gezwungen sein, die 8 Transistoren zu nehmen(10V)...

    Danke für die schnellen Antworten,

    lg Koertis

  5. #5
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.970
    Dafür eignen sich UDN2981 bis 4 Treiber.
    Geändert von PICture (12.04.2011 um 12:02 Uhr)
    MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    20.12.2009
    Beiträge
    86
    Ja super schon bestellt
    Softwaremäßig habe ich mir gedacht ich erstellt ein 9x10 Array in denen die Codes für 1,2,3 .. usw. für jedes Segment(9) gespeichert sind.
    Somit schreibe ich immer die Zeile aus die gerade notwendig ist... Die Zeilen verändere ich mit einen Timerinterrupt.
    Was sagt ihr dazu?

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    26
    Beiträge
    1.192
    Hallo,
    das mit dem Array sollte eigentlich gut funktionieren. Geschickt ist es auch noch, wenn du alle Segmentleitungen auf einen PORT (also z.B. alle auf PORTB) hängst. Dann kannst du mit PORTB=Array[Index] die Daten schnell ausgeben.
    Hast du dir schon Gedanken gemacht, wie du die Zeit präzise hochzählen willst? (Timer, Prescaler, Interrupt) und wie hoch die Wiederholfrequenz bei der Anzeige sein soll? (wird wohl auch mit Timer und Interrupt laufen...). Damit die angezeigte Zeit auch stimmt solltest du unbedingt einen Quarz verwenden an XTAL1/2.
    Aber bau erst mal deine Hardware auf
    Grüße, Bernhard

  8. #8
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.970
    Wenn dein Microcontroller zwei Timer hat, ist es richtg.

    Sonst würde ich endlose Schleife mit entsprechenden Verzögerungsschleifen für Displaysteuerung erstellen, die immer nur für Zeitaktualisierung durch Timer kurz unterbrochen wird.
    MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    20.12.2009
    Beiträge
    86
    Ich habe das mit dem Array heute programmiert und es funktioniert super, ich lasse bei einem Interrupt meine Funktion aufrufen bei der die "Linie" (die ausgegeben wird) um 1 Tausenstel erhöht wird.
    D.h. meine Vorgangsweise schaut jetzt so aus, ich werde mit meinen Oszi die genaue Quarzfrequenz messen, daraus errechne ich dann wie oft ich den 16bit Timer überlaufen lassen muss, damit ich 1ms bekomme und ab dann spring meine Funktion ein, diese zählt bis 99h

    Dann fehlt nur noch der Ein/Aus Interrupt bzw. reset knopf(könnt ich auch nur den µC resetten)

    Bezüglich der Widerholfrequenzen habe ich mir keinen Kopf gemacht, aber die übrige Zeit die der µC hat(bei 16MHz) kann er schreiben, ich werde es aber so machen dass ich unter 1Mhz bleibe, also so ca. 2-10 us...

    Meine Funktion ganz simple:

    Code:
    void func(uint8_t *A)    {
      A[t]++;
        if(A[t] == 9) { 
          A[t]= 0;
          A[hu]++;
          if(A[hu] == 9){
            A[hu]=0;
            A[z]++;
            if(A[z] == 9){
              A[z] = 0;
              A[s]++;
              if(A[s] ==9){
                A[s] = 0;
                A[ds]++;
                if(A[ds] == 6){
                  A[ds] = 0;
                  A[m]++;
                  if(A[m] == 9){
                    A[m] = 0;
                    A[dm]++;
                    if(A[dm]==6){
                      A[dm]=0;
                      A[h]++;
                      if(A[h]==9){
                        A[h]=0;
                        A[dh]++;
                        if(A[dh]==9)
                          A[dh]=0;
                     }
                   }                            
                 }    
               }
             }
           }
         }
       }
     }
    
    in main wir dann mittels einer forschleife die Zeile so ausgegeben:
    
    PORTA= LINE[i][A[8-i]];
    PORTD = 0x01<< i;
    Geändert von Koertis (12.04.2011 um 18:05 Uhr)

  10. #10
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    26
    Beiträge
    1.192
    Hallo,
    der Code sieht ja lustig aus mit den vielen Einrückungen
    Aber ich glaube, irgendwas passt noch nicht ganz.
    Überleg mal was passiert wenn A[t] vor dem Aufruf der Funktion 8 war. Wird dann ja um eins erhöht, wird also zu einer 9. Dann ist aber die if-Bedingung schon erfüllt, die Stelle wird auf 0 gesetzt und die nächste erhöht. Also wird die 9 komplett übergangen !?

    Du musst auch noch die Ziffen in Siebensegmentcodes umwandeln. Das kannst du per Software mit einem weiteren Array machen (oder mit switch case... oder if else if...). Alternativ ein IC einbauen, dass BCD-zu-7-Segment wandelt.
    Grüße, Bernhard

Seite 1 von 8 123 ... LetzteLetzte

Ähnliche Themen

  1. Stoppuhr
    Von derpedi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 11
    Letzter Beitrag: 07.03.2010, 21:37
  2. Suche schweres Alu-T-Nuten-Profil 80-100mm Breite
    Von erik_wolfram im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 4
    Letzter Beitrag: 26.01.2010, 08:47
  3. Drucksensor für 100mm Wassersäule gesucht
    Von BlaueLed im Forum Sensoren / Sensorik
    Antworten: 2
    Letzter Beitrag: 08.04.2008, 08:29
  4. Suche Hohlkugel Kunststoff/Gummi Dm. 80-100mm
    Von toemchen im Forum Mechanik
    Antworten: 22
    Letzter Beitrag: 19.10.2006, 22:50
  5. Stoppuhr an Lichtschranken
    Von Sebian im Forum Elektronik
    Antworten: 36
    Letzter Beitrag: 22.05.2005, 10:07

Stichworte

Berechtigungen

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