-
        

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 23

Thema: Mutliplxing Code kürzen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    13.01.2008
    Beiträge
    16

    Mutliplxing Code kürzen

    Anzeige

    Hi,

    ich bin neu hier und will mich erstmal kurz vorstellen.
    Ich bin Phil, 20 und bin Neueinsteiger im Thema Elektronik.
    Ich habe zwischen den Jahren ein Programmiergerät für einen ATmega32 mit Programmierkabel gelötet. Das war das erstemal, dass ich mit einem Lötkolben gearbeitet habe und mich mit Spannungen und Strom beschäftigt habe. Bin von daher von meinem ergebnis um so überraschter.

    Antrieb für mein neues Hobby war ein Video auf YouTube von einer LED-Matrix und da dachte ich mir "das will ich auch"! Ja und nun bin ich hier angelangt mit meinen Fragen, denn hier auf dieser Seite habe ich sehr viel über BASCOM-avr erfahren.

    Hatte vorher auch noch nie was mit basic zu tun (nur php, mySQL und etwas Pascal) und habe nun mein eigenes Programm für mutliplexing geschrieben:

    Code:
    $regfile = "m32def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 1600000
    $baud = 9600
    
    Config Portc = Output
    Config Portb = Output
    Portc.0 = 0
    Portc.1 = 0
    Portc.2 = 0
    Portc.3 = 0
    Portc.4 = 0
    Portc.5 = 0
    Portc.6 = 0
    Portc.7 = 0
    Portb.7 = 0
    
    Dim Col As Integer
    Dim Row As Integer
    Dim Time As Integer
    Time = 1
    
    
    Do
    
      For Col = 0 To 8
    
        Config Porta = Input
        Portc.0 = 0
        Portc.1 = 0
        Portc.2 = 0
        Portc.3 = 0
        Portc.4 = 0
        Portc.5 = 0
        Portc.6 = 0
        Portc.7 = 0
        Portb.7 = 0
        If Col = 0 Then
          Portc.0 = 1
          Waitms Time
        Elseif Col = 1 Then
          Portc.1 = 1
          Waitms Time
        Elseif Col = 2 Then
          Portc.2 = 1
          Waitms Time
        Elseif Col = 3 Then
          Portc.3 = 1
          Waitms Time
        Elseif Col = 3 Then
          Portc.3 = 1
          Waitms Time
        Elseif Col = 4 Then
          Portc.4 = 1
          Waitms Time
        Elseif Col = 5 Then
          Portc.5 = 1
          Waitms Time
        Elseif Col = 6 Then
          Portc.6 = 1
          Waitms Time
        Elseif Col = 7 Then
          Portc.7 = 1
          Waitms Time
        Elseif Col = 8 Then
          Portb.7 = 1
          Waitms Time
        End If
    
        For Row = 0 To 3
           Config Porta = Input
          If Row = 0 Then
            Config Porta.0 = Output
            Waitms Time
          Elseif Row = 1 Then
            Config Porta.1 = Output
            Waitms Time
          Elseif Row = 2 Then
            Config Porta.2 = Output
            Waitms Time
          End If
    
        Next
    
      Next
    
    Loop
    Meine Frage ist nun: Wie kann ich diesen Code etwas kürzen?

    in php wüsste ich das, denn ich würde dieses ganzen if - ellseif dinger kürzen in dem ich einfach mache:

    portc.Col (dass das halt da durchläuft) aber das geht nicht.

    Ich hoffe, mir kannn jmd helfen!

    ______
    was ich vllt noch erwähnen müsste: An PA0-2 sind die Ebenen der 3x3x3 Matrix. an PC0-7 und PB7 sind die Spalten der Matrix.

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    ..portc.Col (dass das halt da durchläuft) aber das geht nicht.
    ?? Wieso nicht, wer sagt das ??
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    13.01.2008
    Beiträge
    16
    Bascom sagt das!

    PORTC. ist fest definiert - Col ist eine Variable.

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    *grmpf*
    ..PORTC. ist fest definiert - Col ist eine Variable..
    richtig. und ?

    probier mal
    Code:
    for n = 0 to 7 
              portc.n = 1 
    next
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    13.01.2008
    Beiträge
    16
    Hey,

    geht wohl doch - aber mit nur col!

    Code:
                                           $regfile = "m32def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 1600000
    $baud = 9600
    
    Config Portc = Output
    Config Portb = Output
    Portc = 0
    Portb = 0
    
    Dim Col As Integer
    Dim Row As Integer
    Dim Time As Integer
    Time = 1000
    
    
    Do
    
      For Col = 0 To 8
    
        Config Porta = Input
        Portc = 0
        Portb = 0
    
        Portc.col = 1
          Waitms Time
        Portc.col = 1
          Waitms Time
    
        For Row = 0 To 3
           Config Porta = Input
            Config Porta.row = Output
            Waitms Time
          Elseif Row = 1 Then
            Config Porta.1 = Output
            Waitms Time
          Elseif Row = 2 Then
            Config Porta.2 = Output
            Waitms Time
          End If
    
        Next
    
      Next
    
    Loop
    Wenn ich das unten bei den rows mache kommt:

    UNOWN Config PARAMETER [PORTA.ROW]

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    .. Config Porta.row = Output ..
    Das ist natürlich ein Brimsen.

    das wär dann DDRA.row = 1

    Unterschied ist : Compile-time versus Run-Time
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    13.01.2008
    Beiträge
    16
    also anstatt:
    Config Porta.row = Output
    mach ich
    DDRA.row = 1

    eh net, oder?

  8. #8
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    richtig.

    DDRA ist das In/out controll register
    PINA ist Input
    PORTA ist Output

    und, unabhängig davon,
    kannst du bei einem beliebigen Byte feste Werte (PORTB.3 = ) oder eben auch variable verwenden (PORTB.var = )

    Schau aber nochmal in dein Programm :
    "for col = 0 to 8" wären 9 Bits, soviele gibt's nicht
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    13.01.2008
    Beiträge
    16
    okay mein code sieht jetzt so aus:

    Code:
    $regfile = "m32def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 1600000
    $baud = 9600
    
    Config Portc = Output
    Config Portb = Output
    
    Dim Col As Integer
    Dim Row As Integer
    
    Do
    
      For Col = 0 To 8
    
        Config Porta = Input
        Portc = 0
        Portb = 0
        Portc.col = 1
        If Col = 8 Then
          Portb.7 = 1
        End If
    
        For Row = 0 To 3
           Config Porta = Input
           DDRA.row = 1
    
        Next
    
      Next
    
    Loop
    Was kann ich jetzt noch machen?

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    DIM COL AS BYTE
    DIM ROW AS BYTE
    spart schonmal RAM und ist eleganter... mehr als 255 Zeilen/Spalten wirste kaum haben, oder?
    Und wieso setzt du PortA ständig als Input?
    Das brauchste nur einmal ganz oben vor dem Loop für beide Ports als Output machen.
    FOR COL = 0 TO 8
    ist immer noch falsch, der Port hat nur 8 Pins, angefangen bei 0. 0 bis 8 sind aber 9 Zustände

    Der nächste Schritt wäre jetzt ein Shadow-RAM in dem der µC den "Bildschirminhalt" ablegt und dann immer wieder abspielt.
    Das geht prima mit nem Array, der M32 hat ja auch ausreichend RAM für sowas:
    DIM SHADOW_RAM(3) AS BYTE
    wäre dann ein Byte-Array mit 3 Einträgen.
    Bitte beachten: in Bascom ist das erste Element immer 1, nicht 0 (beim EEP ists dann wieder 0, also aufpassen!)...
    Zugreifen kannst du so:

    FOR X = 1 TO 3
    PRINT SHADOW_RAM(X)
    NEXT X

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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