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

Thema: Einfache Schreibweise einer 5-Bit Wahrheitstabelle

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    @ Searcher: Das, was du als Beispiel geschrieben hast, funktioniert leider nicht. Die Eingangsports können nicht an eine Variable übergeben werden. Wenn ich die Variable entsprechend als Byte deklariere und dem Port mit "Programm = PINA" zuweise, kann ich machen was ich will - das Register reagiert nicht auf Tastenbefehle.
    Also bei mir hat sich dieses Vorgehen sehr bewährt, und wenn die einzelnen Bits im Register PINA offensichtlich die Pegel auf den Leitungen korrekt darstellen, muss der Fehler wo anders liegen. Was hast Du denn Hardware-seitig mit den Anschlüssen A.7 bis A.5 gemacht?

    Sehr hilfreich wäre es, wenn Du uns Deinen Code mal zeigen könntest. Mit so ´ner quadratmetergroßen Wahrheitstabelle statt einer einzigen (korrekten!!) Befehlszeile wirst Du doch ramdösig, oder???

  2. #2
    Und wie ich das werden würde... ^^

    Hallo Sauerbruch.

    Die Wahrheitstabelle habe ich jetzt im Ganzen umgesetzt. Dabei sind alle Eingangspins benannt. Die internen PullUp's sind gesetzt, wodurch ich die nicht angeschlossenen Pins im Grunde auch in der Luft hängen lassen könnte - oder was meinst/denkst du? Würde dies vielleicht zu Fehlfunktionen führen?

    Der Code sieht bislang so aus (nach meinem letzten Post geschrieben):

    Code:
    $regfile = "m8515.dat"
    $crystal = 8000000
    $hwstack = 40
    $swstack = 16
    $framesize = 32
    
    
    '-------------------------------------------------------------------------------
    '  *** Konfiguriere Ein- und Ausgangsports ***
    
    Config Porta = Input
    Config Portb = Output
    Config Portc = Output
    Config Portd = Output
    
    Porta = &HFF       ' Aktiviert die internen Pullup-Widerstände
    Portb = &HFF       ' schaltet alle Ausgänge 1, LED = 0
    Portc = &HFF
    Portd = &HFF
    
    
    '-------------------------------------------------------------------------------
    '  *** Konfiguriere Timer ***
    
    Config Timer0 = Timer , Prescale = 1024
    On Timer0 Isr_timer0
    Enable Timer0
    Timer0 = 177
    Enable Interrupts
    
    
    '-------------------------------------------------------------------------------
    '  *** Deklarieren der Variablen ***
    
    Dim Timercounter As Byte
    
    
    '-------------------------------------------------------------------------------
    '  *** Deklarieren der Subroutinen ***
    
    Declare Sub All_off
    Declare Sub All_on
    Declare Sub Horizontal_lines
    Declare Sub Vertical_lines
    Declare Sub Straight
    Declare Sub Diagonal_falling
    Declare Sub Diagonal_rising
    Declare Sub Net
    Declare Sub Net_invert
    Declare Sub Arrow_up
    Declare Sub Moving_net
    
    
    '-------------------------------------------------------------------------------
    '   ===============================
    '      ***** Hauptprogramm *****
    ' ===================================
    
    Do
    
       Select Case Pina
             Case &B11111111 : Call All_off       '                        00000
             Case &B11111110 : Call All_on       '                        00001
             Case &B11111101 : Call Horizontal_lines       '          00010
             Case &B11111100 : Call Vertical_lines       '              00011
             Case &B11111011 : Call Straight       '                      00100
             Case &B11111010 : Call Diagonal_falling       '           00101
             Case &B11111001 : Call Diagonal_rising       '            00110
             Case &B11111000 : Call Net       '                            00111
             Case &B11110111 : Call Net_invert       '                  01000
             Case &B11110110 : Call Arrow_up       '                    01001
             Case &B11110101 : Call Moving_net       '                 01010
    
    
       End Select
    
    
    Loop
    
    
    '-------------------------------------------------------------------------------
    '  ***  ISR für Timer erzeugen - Overflow-Counter in Warteposition bringen ***
    
    Isr_timer0:
       Timer0 = 177
       Incr Timercounter
    ' ### Gestartet wird der Timer im jeweiligen Unterprogramm.
    ' Eingestellt ist der Timer auf 0,01s. ###
    
    
    
    '-------------------------------------------------------------------------------
    ' ====================================
    '      ****  Unterprogramme  ****
    '   ================================
    
    Sub All_off:       '                00000
    
       Portd = &B11111111
       Portc = &B11111111
       Portb = &B11111111
       Stop Timer0
       Timer0 = 177
    
    End Sub All_off
    
    
    Sub All_on:       '                 00001
    
       Portd = &B00000000
       Portc = &B00000000
       Portb = &B00000000
    
    End Sub All_on
    
    
    Sub Horizontal_lines:       '       00010
    
       Portd = &B10101010
       Portb = &B10101010
       Portc = &B10101010
    
    End Sub Horizontal_lines
    
    
    Sub Vertical_lines:       '         00011
    
       Portd = &B00000000
       Portc = &B11111111
       Portb = &B00000000
    
    End Sub Vertical_lines
    
    
    Sub Straight:       '               00100
    
       Portd = &B11111111
       Portc = &B00000000
       Portb = &B11111111
    
    End Sub Straight
    
    
    Sub Diagonal_falling :       '      00101
    
       Portd = &B00100100
       Portc = &B01001001
       Portb = &B10010010
    
    End Sub Diagonal_falling
    
    
    Sub Diagonal_rising:       '        00110
    
       Portd = &B10010010
       Portc = &B01001001
       Portb = &B00100100
    
    End Sub Diagonal_rising
    
    
    Sub Net:  '                         00111
    
       Portd = &B10101010
       Portc = &B01010101
       Portb = &B10101010
    
    End Sub Net
    
    
    Sub Net_invert:       '             01000
    
       Portd = &B01010101
       Portc = &B10101010
       Portb = &B01010101
    
    End Sub Net_invert
    
    
    Sub Arrow_up:       '               01001
    
       Portd = &B11011101
       Portc = &B10111011
       Portb = &B11011101
    
    End Sub Arrow_up
    
    
    Sub Moving_net       '              01010
    
       Start Timer0
          If Timercounter = 1 Then
             Portd = &B10101010
             Portc = &B01010101
             Portb = &B10101010
          Elseif Timercounter = 120 Then
             Portd = &B01010101
             Portc = &B10101010
             Portb = &B01010101
          Elseif Timercounter = 240 Then
             Timercounter = 0
          End If
    
    End Sub Moving_net
    Erläuterungen zu den einzelnen Modulen habe ich nicht mehr beigefügt. Bei Interesse kann man sich das Ergebnis im Code der einzelnen Ports anschauen. Quasi stellen die 3 Ports das Regal dar, welches eigentlich nur nach links gekippt wurde ^^.

    Beim letzten Modul mit dem Timer habe ich derzeit noch ein kleines Konflikt-Problem: Die LED leuchten nicht konstant, sondern nur ganz kurz auf, erlöschen sofort wieder und mit dem nächsten Takt erleuchtet die andere LED-Reihe nur ganz kurz - usw.ff. Denke, dass es mit der Ausschalt-Logik zusammenhängt, die ich schreiben musste, wenn kein Eingangsport ein Low-Signal führt. Dann muss die Steuerung nämlich auch alle Ports auf High schalten.

    Konfiguriert ist die Steuerung derzeit noch für mein Testboard, das STK-500. Für den Controller selbst muss ich es später komplett invertieren.



    LG - Maik

Ähnliche Themen

  1. Kurze Schreibweise bei If- Bedingung in Bascom?
    Von rylix im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 17.06.2011, 16:58
  2. Ersten 8 bit einer 32 bit Zahl auslesen
    Von C_Classic im Forum C - Programmierung (GCC u.a.)
    Antworten: 15
    Letzter Beitrag: 23.05.2010, 00:06
  3. TTL Logik Wahrheitstabelle
    Von Micha.Berlin im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 26.05.2008, 22:32
  4. Ein bestimmtes Bit einer Variable überschreiben
    Von Dane im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 15.04.2006, 14:00
  5. Antworten: 5
    Letzter Beitrag: 30.06.2005, 16:51

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress