mikrocontroller.net

Forum: Compiler & IDEs LED-Matrix mit Atmega 16 und zwei 7x5 Matrixen


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 !

#include <avr/delay.h>
#include <avr/io.h>
#include <util/delay.h>


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

}

eint main (void) {

  /*  7654 3210
         llll lzzz */  


  DDRB=0xff;  
  DDRA=0xff;

  unsigned char zeile, led;
  unsigned char ledb;
        
  
  while (1) {    for (zeile = 0;zeile<8;zeile++) {
          
       
      long_delay(1);
      
    
      led = 0x50;
      ledb = 0xa8;
      

      PORTA= led + zeile;
         PORTB= ledb + zeile;  
    
      }

}               
  return 0;
}

Autor: Multiplex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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..

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also Danke erstamal für die Antwort!!

Ja richtig ich habe an den ersten drei pins einen 3 auf 8 decoder !

Wie kann ich solche Felder definieren ??

Autor: Multiplex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ungefähr so sollte es dann aussehen (das BIT-Muster für die beiden 
Zeichen kannst du dir ja selbst umrechnen...):
//fuer 2 Zeichen...
uint8_t zeichen[2][7] = {
        {0x04, 0x0a, 0x11, 0x11, 0x1f, 0x11, 0x11},  //A
        {0x1e, 0x11, 0x11, 0x1e, 0x11, 0x11, 0x1e}   //B
      } 

...

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

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

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.