- Labornetzteil AliExpress         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 21

Thema: Ganz simpler Drehzahlmesser

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.02.2006
    Ort
    München
    Beiträge
    111
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Zitat Zitat von TobiasBlome
    was passiert hier? Portb = 64 ? Ich kenne es so, dass damit ein Pin vom µC auf 1 oder 0 gesetzt wird aber den Pin 64 gibt es beim 2313 nicht....
    Damit sprichst Du ja auch nicht einen einzelnen Pin sondern alle Pins (einen Port) an.
    Wandel 64 mal in Binärdaten um dann erhältst Du 0000001. Damit wird PB6 auf 1 gesetzt, alle anderen auf 0.

  2. #12
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627
    ach so - also steckt dahinter die "codierung" der einzelnen Zahlen auf der 7-Segmentanzeige - oder?

  3. #13
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.02.2006
    Ort
    München
    Beiträge
    111
    Zitat Zitat von TobiasBlome
    ach so - also steckt dahinter die "codierung" der einzelnen Zahlen auf der 7-Segmentanzeige - oder?
    Genau so ist es.

    Case 56 : Portb = 127 z.B. stellt die Zahl "8" dar. 127 ist 1111111, es werden hier also alle 7 Segmenta aktiviert.
    Case 49 : Portb = 6 z.B. stellt die Zahl "1" dar. 6 ist binär 0110000, es werden hier nur die 2 Segmente angesteuert die für eine "1" nötig sind.

    Genau so funktioniert es mit den anderen Zahlen.

  4. #14
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627
    und wofür steht Case? warum wird nicht mit CASE 1 angefangen sondern mit CASE 48?

  5. #15
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627
    Ich wollte mal das Programm testen - aber meine Hardware spielt nicht mit... Ich weiß falsche Forum aber vielleicht ist das ja nur ein kleiner Fehler...hoffentlich.

    Also wenn ich den Basiswiderstand von der gemeinsamen Anode von der 7-Segmentanzeige ansteuere leuchtet die Anzeige... egal ob der µC 0 oder 5V am Ausgang hat. Wenn ich den µC aus der Fassung nehme ist die Anzeige dunkel! hab das ganze ohne µC mit zwei Netzteilen getestet - selber effekt sobald die Basiswiderstände Masse oder 5V haben schaltet der Transistor...definitiv! Das Problem ist, das der µC 5V und die Anzeigen 8V benötigen! Wenn ich nur mit 5V arbeite schalten die Transistoren richtig! (Masse habe ich jeweils verbunden)
    Was muss ich ändern?

    Tobias
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken unbenannt_176.gif  

  6. #16
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627
    ups was vergessen -> der kleine Kasten auf dem Bild ist eine Treiberendstufe

  7. #17
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.02.2006
    Ort
    München
    Beiträge
    111
    Zitat Zitat von TobiasBlome
    und wofür steht Case? warum wird nicht mit CASE 1 angefangen sondern mit CASE 48?
    Weil das Programm mit dem ASCII-Code arbeitet.
    48 entspricht "0", 49 entspricht "1" usw.

  8. #18
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627
    Hallo, da bin ich wieder Die Hardware hab´ ich geändert und nun kann ich jedes Segment auf jeder Anzeige einzeld ansteuern


    leider musste ich die Ausgänge etwas anders belegen und nun flimmern alle Anzeigen wild durcheinander.

    im Original wurden alle 5 anzeigen nacheinander durchgewechselt bzw. die Variable hochgezählt: For Zaehler = 1 To 5 ABER ich musste PD0,PD4,PD5,PD6 belegen - also eine große Lücke - kann mir jemand helfen wie ich den Zähler auch so zählen lassen kann? Also 0-6 aber ohne 1, 2 und 3 jemand eine Idee?

    Tobias

    Code:
    'Drehzahlmesser für 4-Zylinder Motoren
          '           (c) formtapez (Oktober 2003)
          '        5-stellige Version (ungetestet)
    
          '           Hardware:
          '           ---------
          '           PD0:     gelbe LED (ab 6250 Umdr./min.)
          '           PD6:     Signaleingang
          '           PB0-PB6: 7-segment - Segment A bis G
          '           PD1-PD5: 7-segment - Ziffer - Select
                     'ICH Led1=PD0, L2=PD4, L3=PD5, L4=PD6
    
          $regfile = "ATtiny2313.dat"                           'AT90S2313
          $crystal = 20000000                                   '8MHz Quarz
          Ddrb = &B11111111                                     'PortB = Ausgang
          Ddrd = &B1110011                                      'PortD = Ausgang bis auf PD3+2
    
    
          Dim Icount As Long At &H60
          Dim Wcountlo As Word At &H60 Overlay
          Dim Wcounthi As Word At &H62 Overlay
          Dim Temp As Integer At &H80
          Dim Temp2 As Integer At &H80 Overlay
          Dim Y As String * 5 At &H70
          Dim Z(5) As Byte At &H70 Overlay
          Dim Frequenz As Long
          Dim Freq As Word
          Dim Freq1 As Word
          Dim Freq2 As Word
          Dim Timeout As Byte
          Dim Impulse As Byte
          Dim X(5) As Byte
          Dim Test As Integer
          Dim Test2 As Integer
          Dim Zaehler As Byte                                   'für LED Anzeige wählen...
          Timeout = 0
    
          On Icp1 Oncapture
          On Ovf1 Onoverflow
          Config Timer1 = Timer , Prescale = 64 , Capture Edge = Rising
          Enable Icp1
          Enable Ovf1
          Enable Interrupts
    
    
    '*******************
    '* Start-Animation *
    '*******************
    
         ' Do
          '   Portb = 1
           '  Portd = 2
           '  Waitms 50
           '  Portd = 4
           '  Waitms 50
           '  Portd = 8
           '  Waitms 50
           '  Portd = 16
           '  Waitms 50
           '  Portb = 2
           '  Waitms 50
           '  Portb = 64
           '  Waitms 50
           '  Portd = 8
           '  Waitms 50
           '  Portd = 4
           '  Waitms 50
           '  Portd = 2
           '  Waitms 50
           '  Portb = 16
           '  Waitms 50
           '  Portb = 8
           '  Waitms 50
           '  Portd = 4
           '  Waitms 50
           '  Portd = 8
           '  Waitms 50
           '  Portd = 16
           '  Waitms 50
           '  Portb = 4
           '  Waitms 50
           '  Portb = 64
           '  Waitms 50
           '  Portd = 8
           '  Waitms 50
           '  Portd = 4
           '  Waitms 50
           '  Portd = 2
           '  Waitms 50
           '  Portb = 32
           '  Waitms 50
         ' Loop Until Portb = 32                                 'läuft nur 1x durch                        'Temp2 = 1                                  'Bis zum 1. Impuls
    
    
    
    
    '******************************************
    '* Hauptschleife - LED-Anzeigen ansteuern *
    '******************************************
    
    Main:
    Incr Timeout                                                'Bei Timeout: 0 U/min.
     If Timeout = 10 Then
      Timeout = 10
      Freq = 0
      Y = Str(freq)
      Z(1) = 0
      Z(2) = 0
      Z(3) = 0
      Z(4) = 0
      Z(5) = 48
     End If
    
    For Test2 = 1 To 5                                          'Wert sichern .....
     X(test2) = Z(test2)
    Next Test2
    
    For Test2 = 1 To 400                                        '..... und 400 mal Anzeigen
    
     For Zaehler = 0 To 6
      Test = X(zaehler)
      Select Case Test
    
       Case 48 : Portb = 63
       Case 49 : Portb = 6
       Case 50 : Portb = 91
       Case 51 : Portb = 79
       Case 52 : Portb = 102
       Case 53 : Portb = 109
       Case 54 : Portb = 125
       Case 55 : Portb = 39
       Case 56 : Portb = 127
       Case 57 : Portb = 111
       Case Else : Portb = 0
      End Select
    
    'Anzeige auswählen???
      Portd.zaehler = 1
      Waitus 100                                                'Zeit für jede Anzeige
      Portd.zaehler = 0
     Next Zaehler
    Next Test2
    
    Goto Main
    
    
    
    
    '*************************************
    '* Interrupt-Routine (Zeiten messen) *
    '* (wird bei jedem Impuls ausgelöst) *
    '*************************************
    
    Oncapture:
     Disable Icp1
     Incr Impulse
     If Impulse = 8 Then
      Impulse = 0
      Timeout = 0
      Wcountlo = Timer1
      Timer1 = 46000
      'Frequenz = 240000000 / Icount                             'Umrechnung für 4-Zylinder
      Wcounthi = 0
    
      Freq2 = Freq1
      Freq1 = Frequenz
      Frequenz = Freq1 + Freq2
      Frequenz = Frequenz / 2
      Freq = Frequenz
    
      'If Freq > 5999 Then Portd.0 = 1 Else Portd.0 = 0          ' gelbe LED ab 6000 U/min
      If Freq < 150 Then
       Freq = 0
       Y = Str(freq)
       Z(1) = 0
       Z(2) = 0
       Z(3) = 0
       Z(4) = 0
       Z(5) = 48
    
      Else
    
       Y = Str(freq)
       If Z(4) = 0 Then                                         'Führende Nullen eliminieren
        Do
         Z(5) = Z(4)
         Z(4) = Z(3)
         Z(3) = Z(2)
         Z(2) = Z(1)
         Z(1) = 0
        Loop Until Z(5) > 0
       End If
      End If
     End If
    
     Temp = 1
     Enable Icp1
    Return
    
    Onoverflow:
     Incr Wcounthi
    Return

  9. #19
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627
    also ich habe die zeit mal ganz langsam laufen lassen und festgestellt, das alle LED-Anzeigen 1mal angesteuert werden aber dann nicht mehr....
    als wenn ein Return oder ähnliches fehlt...

  10. #20
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627
    kann mir einer sagen wofür Test2 ist 1 bis 400???

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests