Forum: Mikrocontroller und Digitale Elektronik Xmas LEDs AVR 8x8->16x10 längst auf quer


von Axel R. (Gast)


Lesenswert?

Hallo Leute,

2008 hatte ich zum Fest aus kleinen Glühlampen+Diode eine 8x8 Matrix im 
Fenster und habe "Frohe Weihnachten" als Laufschrift durchlaufen lassen.
Hatte ich mitm Bitmap-tool für LCDs erstellt, waren 8x76 Pixel und dort 
über "Text einfügen" als Byte Array abgespeichert.
Sah tatsächlich ganz nett aus, wenn man denn den Kopf gehoben und 
hingesehen hat.
Die SW war recht simpel,
ich hatte einfach per Schleife "8 mal LPM" die Sache aus dem Flash 
geholt und dargestellt, in R0 stand eine Spalte. Ein zweiter Zähler hat 
dann die Startadresse hochgezählt, um den Laufschrifteffekt zu 
erziehlen.
Dieses Jahr habe ich vor, die Sache zu erweitern (9 Tage noch Zeit, 
hihi).

Die Zeilen sind jetzt über 7442 + NFET gemultiplext (zeile0==oben, 
zeile9==unten) und die Spalten werden nun als 2x8Bit parallel (von oben 
quasi) angesteuert.

Holzrahmen, LEDs, Platine, Treiber usw. ist alles fertig.
Blöd ist, das die Architektur jetzt genau andersrum ist, also quer 
sozusagen. Wenn ich die gleiche Softwarestruktur verwenden würde und auf 
die rechte Hälfte meiner Matrix verzichte, liefe die Schrift senkrecht 
und ist 90° gedreht.

Zwei Byte sind jetzt meine oberste Zeile im "Bild" und nicht mehr die 
zwei ersten linken Spalten.

Ich weiss im Moment wirklich nicht, wie mir einen vitruellen 
Screenbuffer odersowas hinbasteln soll, um die Informationen wieder 
spiegel-und rotationsrichitg darstellen zu können. Evtl. kann mir nen 
Tipp geben, danke.

Axelr .- .-.

von Axel R. (Gast)


Angehängte Dateien:

Lesenswert?

hab nochn verwackeltes Bild auf meinem Handy gefunden :)

edit:                          ...wie ich mir...
                                        \/
>Ich weiss im Moment wirklich nicht, wie mir einen vitruellen
>Screenbuffer odersowas hinbasteln soll, um die Informationen wieder
>spiegel-und rotationsrichitg darstellen zu können. Evtl. kann mir nen
>Tipp geben, danke.

von Axel R. (Gast)


Angehängte Dateien:

Lesenswert?

Frohes Fest und danke an alle, die mir mit Tipps geholfen haben, meinen 
virtuellen Grafikspeicher für die LED Anzeige aufzubereiten.

Axelr .- .-.

von Axel R. (Gast)


Angehängte Dateien:

Lesenswert?

ich komme nochmals auf euch drauf zu:

Eigentlich ist es zu spät, sich dieses Jhr nochmals darum zu kümmern, 
das Display nun doch quer am Balkon zu besfestigen, wenn die Software - 
bedingt durch die Einfachheit dieser - die Schrift nur hochkant 
darstellen kann.

ich habe mir nun ein kleines Bitmap erstellt."Frohe Weihnachten" Also 
ein breiter Buchstabe und versuche nun, diesen durch mein Anzeigefenster 
zu schieben. An der Schaltung hat sich nichts geändert, PORTA und PORTC 
stellen die linke und rechte Hälfte des Dispalys dar. PORTD hat den 
Zeilendecoder (7442) und taktet die Zeilen von oben nach unten.
Ich habe jetzt nochmal von vorne begonnen und mit WINAVR ein wenig herum 
gespielt.

ich habe mir 20x8Byte Schattenspeicher eingerichtet und wollte per 
"pgm_read_byte" die Daten aus dem Flash reintakten. ich bin zu blöd, 
Leute.
Die eigentlich Routine steht und ich wäre in der Lage ein Standbild 
anzeigen zu lassen. Aber wenn ich dann "rechts" rüberrücke im Flash, 
läuft mein Bild nicht, sondern springt um ganze Buchstaben. Ich muss das 
irghentwie schieben, rollen sonsterwie ...
Habe ich auch probiert, komme abewr nicht zurecht.
Evtl. hat jemand Lust, sich mal den Quelltext im Anhang anzusehen. Dann 
kan ich das heute abend noch quer am Balkon aufhängen.

Danke
Axelr.

Ich weiss, das es 10 minuten vor der Angst ist, aber ich lag die letzte 
Woche im Bett |:)

von Axel R. (Gast)


Lesenswert?

im Archiv gefunden...
Wie gesagt: Display senkrecht aufgehangen und direkt mit "pgm_read_byte" 
und einem linearen Zähler auf die Ports gegeben.
Waagerecht betrieben bekomm ich das nicht hin - hmm.

von Axel R. (Gast)


Angehängte Dateien:

Lesenswert?

eiei 8(ACHT) MB! kann man das hinstutzen?

: Bearbeitet durch Moderator
von axelr. (Gast)


Angehängte Dateien:

Lesenswert?

Ich habs noch mal bearbeitet

Dass mpg kann mein Safari jedenfalls nicht

von Axel R. (Gast)


Lesenswert?

jetzt gehts halbwegs :|

ich hatte aus einer Grafik-LCD Routine in Erinnerung, wie man das 
reinschieben muss ;)
einen Teil vom aktuellen Byte und einen Teil des nächsten...
Ganz hundertprozentig funktioniert das trotzdem noch nicht. Immer dann, 
wenn mit Null geschoben wird, steht die Anzeige scheinbar für einen 
Moment, aktualisiert sich trotzdem. Ich werde das noch mal genauer 
untersuchen. Es entstehen dann alasing-Effekte, die sich besonders dann 
bemerkbar machen, wenn Pixel dicht beieinander liegen.
Ich habe das Display mal eben ins Fenster gestellt und mache nochmal ein 
(kurzes) Video. Bis gleich ;))
1
int main(void)
2
{
3
PORTD= 10; // zeilendecoder 74LS42 auf Bereich ausserhalb gültiger Zeilenummer (LEDs dunkeltasten)
4
PORTA= 0;  // linke Spalte alles aus
5
PORTC= 0;  // rechte Spalte alles aus
6
DDRD= 255;
7
DDRA= 255;
8
DDRC= 255;
9
10
  // Timer 0 konfigurieren
11
  TCCR0 = (1<<WGM01); // CTC Modus
12
  TCCR0|= (1<<CS01)|(1<<CS00); // Prescaler 64
13
  // ((7372800/64)/1000) = 115.2 gibt ca. 1ms
14
  OCR0 = 115;
15
 
16
  // Compare Interrupt erlauben
17
  TIMSK |= (1<<OCIE0);
18
   // Global Interrupts aktivieren
19
  sei();
20
 
21
 while(1)
22
  { 
23
  
24
  if (frame_rate>8) {
25
  
26
    if (next_step>144) {
27
      next_step = 0; // 16x8
28
      aufnahmeword=0;
29
    }
30
      
31
    for (tmp= 0;tmp<20;tmp+=2) {
32
      shadow_ram[tmp] = pgm_read_byte(&data_xmas_sw_128x12_BMP[(tmp*8)+(next_step/8)])<<((next_step) &0x07) | pgm_read_byte(&data_xmas_sw_128x12_BMP[(tmp*8)+1+(next_step/8)])>>(7-((next_step) & 0x07));
33
      shadow_ram[tmp+1] = pgm_read_byte(&data_xmas_sw_128x12_BMP[(tmp*8)+1+(next_step/8)])<<((next_step) &0x07) | pgm_read_byte(&data_xmas_sw_128x12_BMP[(tmp*8)+2+(next_step/8)])>>(7-((next_step) & 0x07));
34
    }
35
      
36
    next_step++;
37
    frame_rate = 0;
38
  
39
  }
40
      
41
  }
42
}
43
44
/*
45
Der Compare Interrupt Handler 
46
wird aufgerufen, wenn 
47
TCNT0 = OCR0A = 115-1 
48
ist (115.2 Schritte), d.h. ca. alle 1 ms
49
*/
50
ISR (TIMER0_COMP_vect)
51
{ 
52
53
54
  PORTD = 10;      // Zeile dunkeltasten ( gültiger Bereich von 0-9 74LS42 Zeilendecoder)
55
  if (zeile>9) {    // bei Bildanfang (oben) für die Main() Bescheid geben
56
    zeile=0;
57
    for (indx=0;indx<19;indx++) 
58
    sr[indx]= shadow_ram[indx];
59
    i= 0;
60
    frame_rate++;
61
  }
62
  else {
63
64
  PORTC =sr[i++]; //Jetzt die Werte den Ports zuweisen
65
  PORTA =sr[i++];
66
  PORTD = zeile++;    // Jeweilige Zeile aktivieren
67
  
68
  }
69
70
}

von Axelr. (Gast)


Angehängte Dateien:

Lesenswert?

Hoffe, man kann erkennen, wie ich das mit dem Stocken und der 
Aktualisierung meine.

von Axel R. (Gast)


Lesenswert?

ok, kann man nicht wirklich - egal ich beende mal meinen Monolog noch :)

Ich habe schon versucht, den Schattenspeicher vor jedem Bildaufbau im 
Interrupt in eine andere Variable um zu kopieren, weil ich denke, das 
hier evtl. Probleme auftreten, wenn der eine gerade den Speicherbereich 
beschreibt und die Anzeige eben diseen aktualisieren will.

Allen noch ein paar ruhige Feiertage.
Bis dann
Axelr.

Achso(edit). Wer Lust hat, kann gern Hinweise geben, wie man das 
Richtig(er) machen könnte, Danke

von Axelr. (Gast)


Angehängte Dateien:

Lesenswert?

Obgleich sich das Interesse und die Anteilnahme in Grenzen hält, schicke 
ich noch eine geschnittene Endgültige Version ins Rennen.

Frohes neues Jahr denn ...
Axelr.

von Axel R. (Gast)


Lesenswert?

ich habe meinen eigenen Quelltext wiedergefunden, juhuu

:)

EDIT_
(4 oder 16) Graustufen werde ich jetzt mit aufnehmen und dann:
lese ich meinen USB-Maussensor aus und stelle ein Teelicht davor.
DAS sieht bestimmt gut aus...

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Ja, so´n Forum ist ein guter Cloud-Speicher ;-) Frohes Fest!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.