- LiFePO4 Speicher Test         
Ergebnis 1 bis 8 von 8

Thema: Testcode für eine 4stellige LED Dot-Matrix Anzeige

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.10.2006
    Beiträge
    131

    Testcode für eine 4stellige LED Dot-Matrix Anzeige

    Anzeige

    Powerstation Test
    Ich habe mal meinen bisherigen Code hier gepostet. Der macht nichts anderes als nur 4 Zeichen die in einem Textstring hinterlegt sind auf 4 Dot-Matrix Led Modulen auszugeben. Diese sind leider nur schlecht abzulesen, da ich diese nur mit 5V betreibe. Ich will aber noch die Ansteuerung auf 12V umbauen so dass die Anzeige gut ablesbar ist.
    Ich wäre für ein paar Ideen sehr dankbar das Ganze Interruptgesteuert über einen Timer laufen zulassen. Auch wäre es schön wenn Jemand ein Beispiel oder eine Idee hat wie man denn die Zeichen mit den seriellen Anschlüssen von einem anderen AVR an diesen übergebenkönnte, so dass diese auf der LED Dot-Matrix Anzeige erscheinen.

    Da ich leider noch nicht herausgefunden habe wie man Code von Basom in einem extra Fenster postet habe ich es als Kopie an diesen Text gehängt.

    Code:
    ' ****************************************************************************
    ' *                     Led Dot-Matrix Anzeige                               *
    ' *                              V 0.1                                       *
    ' * Fuse-Bit Einstellung: Interner 8MHz Oszillator mit abgeschaltetem Teiler *
    ' ****************************************************************************
    
    ' ****************************************************************************
    ' *                    Anschlussbelegung Attiny2313                          *
    ' *         _____                                                            *
    ' *         (Reset/dw) PA2 = Pin1  Pin20 = Vcc                               *
    ' *              (RxD) PD0 = Pin2  Pin19 = PB7 (UCSK/SCK/PCINT7)             *
    ' *              (TxD) PD1 = Pin3  Pin18 = PB6 (MISO/DO/PCINT6)     <7.ZL>   *
    ' *            (XTAL2) PA1 = Pin4  Pin17 = PB5 (MOSI/DI/SDA/PCINT5) <6.ZL>   *
    ' *            (XTAL1) PA0 = Pin5  Pin16 = PB4 (OC1B/PCINT4)        <5.ZL>   *
    ' *   (CKOUT/XCK/INT0) PD2 = Pin6  Pin15 = PB3 (OC1A/PCINT3)        <4.ZL>   *
    ' *             (INT1) PD3 = Pin7  Pin14 = PB2 (OC0A/PCINT2)        <3.ZL>   *
    ' *  <Reset>      (T0) PD4 = Pin8  Pin13 = PB1 (AIN1/PCINT1)        <2.ZL>   *
    ' *  <Daten> (OC0B/T1) PD5 = Pin9  Pin12 = PB0 (AIN0/PCINT0)        <1.ZL>   *
    ' *                    GND = Pin10 Pin11 = PD6 (ICP)                <Takt>   *
    ' ****************************************************************************
    
    $regfile = "attiny2313.dat"             'ATtiny2313 Prozessor
    $crystal = 8000000                      '8MHz int. Taktquelle
    $baud = 9600
    
    '$sim                                    'nach Test entfernen !!!!!!
    
    Dim Z As Byte                           'Anzahl der Anzeigenstellen (4)
    Dim X As Byte                           'Spaltenzähler pro Anzeige 5 Spalten.
    Dim Zeichen As Integer                  'Zeichencode für Decoder
    Dim Temp As String * 1                  'Zwischenspeicher für Stringbearbeitung
    Dim Index As Integer                    'Zeichenposition für Caraktergenerator
    Dim Text As String * 5                  'Testvariable (später Empfangspuffer)
    Text = "ABCD"                           'Teststring
    
    Config Portb = Output                   'Port B auf Ausgabe (Zeilen)
    Config Portd.4 = Output                 'Pin D4 auf Ausgabe (Reset Schiebereg.)
    Config Portd.5 = Output                 'Pin D5 auf Ausgabe (Daten Schiebereg.)
    Config Portd.6 = Output                 'Pin D6 auf Ausgabe (Takt Schiebereg.)
    Portd.5 = 1                             '1 für Schieberegister setzen und
    Portd.4 = 0                             'Schieberegister Reset durchführen.
    
    Anfang:
    
    'Waitus 10
    Portd.4 = 1                             'Schieberegister freigeben und alle
    For X = 0 To 24                         'Ausgänge der Schieberegister auf 1
      Portd.6 = 0                           'schalten.
      'Waitus 10
      Portd.6 = 1
    Next X
    
    Portd.5 = 0                             '0 für Schieberegister ausgeben.
    
    Portd.6 = 0                             '1mal schieben um die 0 auf dem ersten
    Waitus 10                               'Ausgang auszugeben.
    Portd.6 = 1
    Portd.5 = 1                             '1 für Schieberegister ausgeben. Ver-
                                            'hindert weitere 0 auszugeben.
    Z = 1                                   'Beginn 1.Anzeige
    X = 1                                   'Beginn 1.Spalte
    
    Do
    
      Temp = Mid(text , Z , 1)              'Zeichen aus String lesen und in
      Zeichen = Asc(temp)                   'Zeichencode dez. umwandeln.
      Z = Z + 1                             'Durchlaufzähler erhöhen und dann im
                                            'Zeichendecoder Zeichen decodieren.
      Index = Lookdown(zeichen , Zeichendecoder , 22)
      Index = Index - 1                     'gefundene Position um 1 korrigieren und
      Index = Index * 5                     'Anfang im Caraktergenerator berechnen.
    
      For X = 0 To 4                        'Pro Zeichen 5 Spalten ausgeben. Dazu
        Portb = Lookup(index , Zeichensatz) 'Code holen und Zähler erhöhen. Dann
        Incr Index                          'Ausgeben und warten (Lesbarkeit der
        Waitus 900                          'Anzeige). Dann Anzeige abschalten und
        Portb = 0                           'per Schieberegister die nächste Spalte
        Portd.6 = 0                         'auswählen.
        Waitus 10
        Portd.6 = 1                         'solange wiederholen, bis 5 Spalten aus-
        Portd.5 = 1                         'gegeben worden sind.
        'Waitms 500                         'Dann nächstes Zeichen holen und eben-
        'Portb = 0                          'falls wie oben beschrieben ausgeben.
      Next X
    
    
    
    Loop Until Z > 4                        'Alle 4 Anzeigenstellen bearbeitet? Dann
                                            'Schieberegister reset und von vorne
    Portd.4 = 0                             'beginnen.
    
    Goto Anfang
    
    ' ****************************************
    ' *      Zeichenmapping - Tabelle        *
    ' ****************************************
    
    Zeichendecoder:
    
    Data $32 , $48 , $49 , $50 , $51 , $52 , $53 , $54 , $55 , $56 , $57
    Data $65 , $66 , $67 , $68 , $69 , $70 , $71 , $72 , $73 , $74 , $75
    
    ' ****************************************
    ' *    Zeichentabelle für Dot-Matrix     *
    ' ****************************************
    
    Zeichensatz:
    
    Data &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000       '  32
    Data &B00111110 , &B01010001 , &B01001001 , &B01000101 , &B00111110       '0 48
    Data &B00000000 , &B01000010 , &B01111111 , &B01000000 , &B00000000       '1 49
    Data &B01000010 , &B01100001 , &B01010001 , &B01001001 , &B01000110       '2 50
    Data &B00100001 , &B01000001 , &B01000101 , &B01001011 , &B00110001       '3 51
    Data &B00011000 , &B00010100 , &B00010010 , &B01111111 , &B00010000       '4 52
    Data &B00100111 , &B01000101 , &B01000101 , &B01000101 , &B00111001       '5 53
    Data &B00111100 , &B01001010 , &B01001001 , &B01001001 , &B00110000       '6 54
    Data &B00000001 , &B01110001 , &B00001001 , &B00000101 , &B00000011       '7 55
    Data &B00110110 , &B01001001 , &B01001001 , &B01001001 , &B00110110       '8 56
    Data &B00000110 , &B01001001 , &B01001001 , &B00101001 , &B00011110       '9 57
    Data &B01111110 , &B00010001 , &B00010001 , &B00010001 , &B01111110       'A 65
    Data &B01111111 , &B01001001 , &B01001001 , &B01001001 , &B00110110       'B 66
    Data &B00111110 , &B01000001 , &B01000001 , &B01000001 , &B00100010       'C 67
    Data &B01111111 , &B01000001 , &B01000001 , &B00100010 , &B00011100       'D 68
    Data &B01111111 , &B01001001 , &B01001001 , &B01001001 , &B01000001       'E 69
    Data &B01111111 , &B00001001 , &B00001001 , &B00001001 , &B00000001       'F 70
    Data &B00111110 , &B01000001 , &B01001001 , &B01001001 , &B01111010       'G 71
    Data &B01111111 , &B00001000 , &B00001000 , &B00001000 , &B01111111       'H 72
    Data &B00000000 , &B01000001 , &B01111111 , &B01000001 , &B00000000       'I 73
    Data &B00100000 , &B01000000 , &B01000001 , &B00111111 , &B00000001       'J 74
    Data &B01111111 , &B00001000 , &B00010100 , &B00100010 , &B01000001       'K 75
    Data &B01111111 , &B01000000 , &B01000000 , &B01000000 , &B01000000       'L 76

    Das geht mit "CODE-Tags" PicNick

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    09.07.2006
    Alter
    40
    Beiträge
    53
    Vielendank für das Posten des Codes Ein ähnliches Projekt habe ich auch vor, leider noch nicht viel ahnung vom Programmiren.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    29.09.2006
    Ort
    Kempen / Ndrh.
    Alter
    60
    Beiträge
    60
    Hi !

    Kannst Du mal bitte einen Schaltplan einstellen, dann kann man sich eher mal Gedanken machen, warum Dein Display so schlecht ablesbar ist ?!

    Gruß, Andreas

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    09.07.2006
    Alter
    40
    Beiträge
    53
    So hab mir mal eine kleine schaltung aufgebaut mit einem 74HCT595 schieberegister und einem Tiny2313

    Leider Funktioniert das Display nicht wenn ich den Reset ausgang auf das schieberegister gelegt habe, also Port PD4 auf Pin 12 , den rest hab ich so angeschlossen PD5 -> 14 und PD6-> 11.

    Hat da jemand eine ahnung was das Problem sein könnte

    Bild hier  

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.02.2006
    Beiträge
    164
    ein schaltplan sagt mehr als tausend worte

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    09.07.2006
    Alter
    40
    Beiträge
    53
    OK, hab mal schnell einen Schaltplan gezeichnet wie ich die Schaltung aufgebaut habe.

    Die Ports stimmen jetzt nicht mehr mit meinem vorigem Posting überein.

    Auf dem Schaltplan ist ein Mega8 eingezeichnet, ich benütze aber einen Tiny 2313, aber das tut wohl nicht viel zur sache

    Das Programm habe ich so abgeändert:

    Code:
    Config Portd.3 = Output                 '(Reset Schiebereg.) 
    Config Portd.2 = Output                 ' (Daten Schiebereg.) 
    Config Portd.1 = Output                 '(Takt Schiebereg.)


    Nun ich bin für jeden Tip dankbar, ich bin jetzt schon über 4 tage mit dem Problem beschäftigt und ich weiss echt nich mehr weiter. Werde mich mal mit dem Author der Programmes in verbindung setzen.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken ledmatrix_neu.jpg  

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.02.2006
    Beiträge
    164
    irgendwie versteh ich den schaltplan nicht ... da gehen doch dann immer 5 led´s an ... fehlt da nicht was? multiplexen z.b. ???

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    09.07.2006
    Alter
    40
    Beiträge
    53
    Zitat Zitat von veit
    irgendwie versteh ich den schaltplan nicht ... da gehen doch dann immer 5 led´s an ... fehlt da nicht was? multiplexen z.b. ???
    Ja ich hab die Matrix falsch gezeichnet

    Habe jetzt eine Neue Version hochgeladen

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad