LED-Matrix mit Atmega 16 und zwei 7x5 Matrixen

Gast #1135067
Lesenswert?
• ▲
▼
Hallo alle Zusammen !!

Ich baue gerade eine LED Anzeige hab mommentan eine Platine mit einem 
Atmgea 16 und zwei 7x5 Led Matrixen gebaut.
Über PortA kann iich ein Modul beschreiben und über PortB das Zweite.
76543210  8-bit  uC Port
SSSSSZZZ  Spalte, Zeile

Ich gehe hintereinander schnell alle Zeile (Pin 0,1,2) durch und kann 
über Pin 3,4,5,6,7 die jeweilige splate aktivieren.

Nun meine Frage ich habe bis jetzt immer das gleiche Spaltenmuster 
drüber laufen lassen(siehe C Code unten), wie muss mein C Code Aussehen 
damit ich z.B: Buchstaben darstellen kann ??

Bitte um Hilfe !! ,Danke im Voraus !

1
#include <avr/delay.h>
2
#include <avr/io.h>
3
#include <util/delay.h>
4

5

6
void long_delay(uint16_t ms) {
7
    for(; ms>0; ms--) _delay_ms(1);
8

9
}
10

11
eint main (void) {
12

13
  /*  7654 3210
14
         llll lzzz */  
15

16

17
  DDRB=0xff;  
18
  DDRA=0xff;
19

20
  unsigned char zeile, led;
21
  unsigned char ledb;
22
        
23
  
24
  while (1) {    for (zeile = 0;zeile<8;zeile++) {
25
          
26
       
27
      long_delay(1);
28
      
29
    
30
      led = 0x50;
31
      ledb = 0xa8;
32
      
33

34
      PORTA= led + zeile;
35
         PORTB= ledb + zeile;  
36
    
37
      }
38

39
}               
40
  return 0;
41
}
Gast #1135109
Lesenswert?
• ▲
▼
Also erstmal zu meinem Verständnis: für die Zeilen hast du noch einen 
8aus3-Decoder dranhängen? Wenn ja, zählt deine for-Schleife eins zu weit 
(was man aber in der Physik nicht merkt....).

Zur Frage, ohne C-Code, nur als Denkanstoss:
Du musst das Bit-Muster jedes einzelnen Zeichens, was dargestellt werden 
soll, in geeigneter Art und Weise (Spalten/Zeilen) in Feldern 
definieren. Bei dir wäre das zeilenweise, weil du die Zeilen hochzählst. 
Wenn dann also die Zeile 0 in der for-Schleife dran ist, gibst du an dem 
Spaltenport das Zeilenmuster für die Zeile des gewünschten Zeichen aus 
usw..
Gast #1135225
Lesenswert?
• ▲
▼
ungefähr so sollte es dann aussehen (das BIT-Muster für die beiden 
Zeichen kannst du dir ja selbst umrechnen...):
1
//fuer 2 Zeichen...
2
uint8_t zeichen[2][7] = {
3
        {0x04, 0x0a, 0x11, 0x11, 0x1f, 0x11, 0x11},  //A
4
        {0x1e, 0x11, 0x11, 0x1e, 0x11, 0x11, 0x1e}   //B
5
      } 
6

7
...
8

9
for (zeile = 0; zeile < 7; zeile++) {
10

11
  PORTA = zeichen[0][zeile]*8 + zeile;  // "A" auf 1.Matrix
12
  PORTA = zeichen[1][zeile]*8 + zeile;  // "B" auf 2.Matrix 
13
}

Wobei man bei vielen zu definierenden Zeichen sich klar werden sollte, 
welchen Speicherbereich man im MC verwendet...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.