Forum: Projekte & Code Digitaler Bilderrahmen mit mega8 S65 Display und SD-Karte


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von M. B. (mbode001)


Angehängte Dateien:

Lesenswert?

Hi Kollegen,

ich habe einen digitalen Bilderrahmen mit SD-Karte und dem Siemens S65 
Display gebaut.
Das ist heute vielleicht nicht mehr so aktuell, weil es die Dinger 
inzwischen überall zu kaufen gibt, aber ich hatte mit dem Projekt schon 
vor fast zwei Jahren angefangen. Es lag dann lange rum und erst seit ich 
einen AVR-Dragon hatte und vernünftig debuggen konnte, ging es schnell 
voran.
Ich hatte es ursprünglich für einen mega168 programmiert (wegen Speicher 
und Debug-Möglichkeit), jetzt aber einige Features gestrichen, damit es 
in die 8k eine mega8 paßt.
Ich verwende für beide SPI Schnittstellen einfaches Soft-SPI und lasse 
den mega8 einfach mit dem internen 8MHz RC-Oszillator laufen. Damit 
dauert der Bildwechsel kanpp 3s. Das finde ich völlig ok, aber wenn es 
jemand schneller möchte, kann er ja auf Hard-SPI umstellen und evtl. 
ext. 16Mhz Quarz. Durch Soft-SPI ist man natürlich ziemlich flexibel 
bzgl. Pinning und anderen CPUs.
Das Programm ist simpel und geht einfach davon aus, dass die 
gespeicherten Bitmaps genau 176W x 132H 24Bit-Pixel Bitmaps sind. Da 
wird nix skaliert o.ä.! Wenn's nicht paßt, gibt's bunte Pixelmuster!
Die SD-Routinen stammen von Nick Lott und seinem Butterfly MP3 player. 
Sie lesen alle *.bmp files im Root-Verzeichnis einer FAT16 formatierten 
SD-Karte ein (mag keine Verzeichnisse).
Die S65-Routinen stammen natürlich von Christian Kranz und funktionieren 
nur mit dem LS020 (ich habe noch P03 Displays, die ich aber nicht zum 
Laufen bekomme).
Das Programm hat feste Bildwechselzeiten und blendet während des 
Ladevorgangs den Dateinamen ein. Das kann natürlich jeder so anpassen, 
wie er mag (kein Dateiname oder die ganze Zeit...). Sollte ein Fehler 
auftreten, dann wird versucht, eine qualifizierte Fehlermeldung 
auszugeben.

Viel Spaß damit,

Matthias

P.S. Es muß ja nicht unbedingt ein Bilderrahmen sein. Das Teil 
verrichtet auch klaglos seinen Dienst als Werbetafel oder Stadionanzeige 
auf einer Modellbahnanlage. Es läßt sich auch gut in originelle 
Geschenke einbauen (Bauteile < 20 Euro).

von M. B. (mbode001)


Angehängte Dateien:

Lesenswert?

Hier ist noch ein Bild von dem Teil.

Einen Schaltplan habe ich noch nicht gezeichnet, aber die Schaltung ist 
auch ziemlich einfach. Die Pinbelegungen der SD-Karte und des S65 
Displays gehen aus den defines der Headerfiles hervor. Als 
Spannungsregler verwende ich einen LM317L, den ich auf 2.9V eingestellt 
habe. Damit laufen alle drei Komponenten, ohne dass man sich Gedanken um 
Level-Shifting etc. Gedanken machen muss.
Bei mir läuft das ganze an einem alten Steckernetzteil. Das liefert 12V 
im Leerlauf und daraus kann man über einen Vorwiderstand die 10.5V für 
die Hintergrundbeleuchtung speisen.

Matthias

von M. B. (mbode001)


Angehängte Dateien:

Lesenswert?

So sieht's von hinten aus...

von M. B. (mbode001)


Angehängte Dateien:

Lesenswert?

...und so, wenn keine Karte drinsteckt...

von M. B. (mbode001)


Angehängte Dateien:

Lesenswert?

...beim Laden des Bildes wird der Dateiname eingeblendet.

von Basta B. (basti_der_erste)


Lesenswert?

Hallo Matthias,
prima Idee, und preiswert.
Welchen Konverter für die Bilder benutzt du oder bearbeitest du die 
Bilder mit einem Program?

von M. B. (mbode001)


Lesenswert?

Es müssen nur einfache Windows Bitmap Dateien sein, die man mit einem 
Cardreader auf die Karte spielt.
Zum Umformatieren nehme ich Macromedia Fireworks, weil das Scipte und 
Batchverarbeitung kann; da kann man einfach sagen: "nimm alle 100 Bilder 
aus diesem Verzeichnis und wandle sie in 176x132 Bitmaps!". Geht aber im 
Prinzip mit jedem Grafikprogramm. (für die "ganz tief gesunkenen" geht's 
sogar mit Paint!)

von Simon K. (simon) Benutzerseite


Lesenswert?

Nur als Tipp: IrfanView ist Freeware, kann eine ganze Menge Bildformate 
lesen und ebenfalls Batch-Konvertierung.

von Dirk B. (sharandac)


Lesenswert?

Hi, klasse idee und super umsetzung. Kannst du auch noch sie schemtic 
posten? wie erzeugst du die LED-Spannung für das Display ?

CA Dirk

von Iller (Gast)


Lesenswert?

Super Idee,
hätte allerdings auch interesse an einem Schematic.
Wär echt super wenn du das noch machen könntest.

von M. Bode (Gast)


Lesenswert?

Ich bin gerade dabei eine Schematic zu zeichnen.

Matthias

von Avr N. (balze)


Lesenswert?

Hallo Matthias,

bist Du immer noch dabei zu zeichnen ?  ;-)

Wann ist den mit den Schematics zu rechnen ?

MfG,

balze

von Thomas (Gast)


Lesenswert?

Hallo,
find ich auch interessant, die Beschaltung ist mir aber as dem Code 
nicht klar.
Kommt da noch ein Schaltplan nach?

Gruss

Thomas

von Michael S. (snickers)


Lesenswert?

Super Projekt.

Wäre auch an kleinen einem Schalplan interessiert.

von M. Bode (Gast)


Lesenswert?

Sorry, war auf Dienstreise und hatte überhaupt keine Zeit.

Den Schaltplan werde ich in den nächsten Tagen fertig haben.

Matthias

von Thomas (Gast)


Lesenswert?

Guten Tag,
die SD Karte, ist das so eine wie im Telefon aus dem das Display stammt, 
verwendet wird?
Ich kenn mich mit den verschiedenen Speicherkarten nicht so genau aus 
und würd gerne diese Karte (war bei meinem Schrotttelefon halt schon 
dabei) verwenden.

Besten Dank vorab,
Gruss

Thomas

von Michael I. (iller)


Lesenswert?

Thomas wrote:
> Guten Tag,
> die SD Karte, ist das so eine wie im Telefon aus dem das Display stammt,
> verwendet wird?
> Ich kenn mich mit den verschiedenen Speicherkarten nicht so genau aus
> und würd gerne diese Karte (war bei meinem Schrotttelefon halt schon
> dabei) verwenden.
>
> Besten Dank vorab,
> Gruss
>
> Thomas

Die Speicherkarte aus dem Handy (S65) kannst du verwenden

von Willivonbienemaya .. (willivonbienemaya)


Lesenswert?

Wieviel Strom (bei welcher Spannung) braucht das Gerät?

von Marius S. (lupin) Benutzerseite


Lesenswert?

Ganz grob geschätzt würde ich sagen:

12V 70mA
2.9V 150mA

Da die 2.9V aus den 12V gewonnen werden sind es aber 12V 220mA... Pi * 
Daumen

von Hans Dampf (Gast)


Lesenswert?

Hallo, hat sich schon etwas mit dem Schaltplan getan ?

Würde es gerne mal nachbauen, da ich alle Teile hier zur Verfügung habe.

Gruß

Hans Dampf

von M. Bode (Gast)


Lesenswert?

Hallo,

Stromverbrauch:
12 mA während das Bild nur angezeigt wird
37 mA während das Bild aus der SD-Karte gelesen wird

Hintergrundbeleuchtung liegt bei mir bei ca. 15mA

Sorry, hab noch keine Zeit gefunden, das mit dem Schaltplan zu machen.
Aber genaugenommen ist da natürlich nix dran: SD-Karte und Display wie 
in den Headerdateien anschliessen, mega8 mit LM317L und zwei 
Widerständen (240 und 330 Ohm) anschliessen und einen Vorwiderstand (je 
nach Steckernetzteil) für die Hintergrundbeleuchtung...

Gruß,

Matthias

von Thomas (Gast)


Lesenswert?

Hi,
hab es soweit nachgebaut, bekomme auch schon die Fehlermeldung ins 
Display. Super !!

Leider liest der µC die Karte nicht. Habe sie an 3,6V angeschlossen und 
die Eingänge über einen Teiler 1,8K zu 3K (siehe Ulrich Radig Seite) 
angeschlossen. Danach eine mit FAT frisch formatierte Karte rein mit 
einem BMP 176x132 24Bit beschrieben.
Er meldet immer daß keine Karte drin ist. Hab eine andere versucht, das 
gleiche. Werde mal mit einem Scope an der Karte messen ob alle Signale 
da ankommen.

Thomas

von Marius S. (lupin) Benutzerseite


Lesenswert?

> Als Spannungsregler verwende ich einen LM317L, den ich auf 2.9V
> eingestellt habe. Damit laufen alle drei Komponenten, ohne dass man sich
> Gedanken um Level-Shifting etc. Gedanken machen muss.

Wo liegt das Problem Thomas?

von Thomas (Gast)


Lesenswert?

Hallo Marius,
bin einen Schritt weiter. Mit einer 256MB Karte kann ich ein Bild lesen 
(Juhu!!), aber eine 32MB Karte (war beim Telefon dabei) bringt die 
Meldung es sei kein  BMP drauf. Im PC aber habe ich beide Karten mit 
FAT16 formatiert und exakt dasselbe Bild draufkopiert. Der PC liest 
beide Karten, warum der µC nicht?

Ach so: Mein Problem war daß DO und DI vertauscht waren. Der Pin PI der 
Karte (siehe Ulrich Radig) muß an PO und umgedreht.

Ich denke ich muß mal mit Wartezyklen bei der 32MB Karte spielen. Auch 
ein Takt von 1MHz statt 8MHz macht keinen Unterschied.
Gibt es Erfahrungen mit diesen Karten? Drauf steht SanDisk RS-MMC 32MB.

Gruss aus Hofheim im Taunus

Thomas

von Willivonbienemaya .. (willivonbienemaya)


Lesenswert?

Ich hab das hübsche Teil eben mal aufgebaut, nachdem ich heute Mittag 
Displays bekommen habe.

Sieht echt gut aus. Schöne Arbeit !

Ich hab auch mal ne 32 MB Karte reingesteckt. Anfangs ging sie, nachdem 
ich neue Bilder draufgemacht habe ging nichts mehr. Andere Karten gehen 
besser.
Ist mir aber egal. Nehm ich halt ne Karte die geht ;-)

von Thomas (Gast)


Lesenswert?

Hallo,
kann das mit den Herstellern der Katen zusammenhängen? Ich wüßte gerne 
warum es nicht geht, einfach eine reinstecken die geht ist eher 
unbefriedigend.
Weiß jemand da etwas zu??

von M. Bode (Gast)


Lesenswert?

Hallo,

eine 32 MB Karte dürfte nicht funktionieren.
Man kann im PC nur auswählen FAT zu formatieren, aber Windows
benutzt einfach (dagegen kann man sich nicht wehren) für kleine
Karten FAT12. Das hat einen anderen FAT-Aufbau und das versteht das
(simple) Programm im Bilderrahmen nicht.
Ab einer 128 MB Karte müßte es automatisch FAT16 sein und funktionieren!

Gruß,

M. Bode

von Willivonbienemaya .. (willivonbienemaya)


Lesenswert?

Ich habs noch mal mit meiner 32MB Karte versucht.
Auch wenn ich die einfach in XP formatier geht die jetzt.
Der scheint also nicht automatisch immer FAT12 zu nehmen.

Aber wenn es nur an der richtigen formatierung liegt, müsste ja jede 
Karte gehen. Ich habs mit verschiedenen Karten versucht und habe den 
Verdacht, dass Windows beim formatieren mit FAT einfach das Dateisystem 
benutzt, das zuletzt auf der Karte war.
Auf jeden FAll bekomm ich ne 32 MB, 64 MB und 256 MB zum laufen. Alle 
unterschiedliche Hersteller.

von Thomas (Gast)


Lesenswert?

Hallo,
danke für die Tips. Ich hab aber auch versucht im DOS Fenster zu 
formatieren:

format h: /fs:fat

Nimmt XP dann auch FAT12? Werde ich nochmal mit fat16 versuchen. Kann 
ich aber erst am Wochenende machen.

Gruss

Thomas

von Thomas (Gast)


Lesenswert?

HAllo,
hab es nochmals versucht, das kam heraus:

format h:  /fs:fat16
Legen Sie eine neue Diskette in Laufwerk H: ein,
und drücken Sie die EINGABETASTE.
Der Typ des Dateisystems ist FAT.
Das neue Dateisystem ist FAT16.
FORMAT ist für FAT16-Laufwerke nicht verfügbar.

Was heißt das? Erst geht es nicht, dann ist alles FAT16??
Lesen kann ich die Karte aber trotzdem nicht.
Ich hab mal eine andere 32MB Karte bestellt, werde die mal versuchen. 
Die Karte wird nur erkannt, die Datein aber nicht gelesen. Ich nutze XP, 
habe nichts anderes.
Wäre für Anregungen dankbar.

Gruss

Thomas

von Patric N. (patric-)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

habe den Bilderrahmen mittlerweile auch in Betrieb genommen. Probleme 
gab's wie bei Thomas auch, das ich DI und DO an der SD Karte vertauscht 
hatte.

Was mir aber absolut nicht gelingt und ich weiss echt nicht warum, ist 
den source code neu zu compilieren und dann auch dem ATMEGA8 zum laufen 
zu bringen. Ich würde gerne die eine oder andere Änderung im Code 
vornehmen. Wenn ich das Projekt in AVRStudio lade, läßt es sich ohne 
Probleme compilieren, aber das HEX file (siehe attachement) hat leicht 
anderen Inhalt als das originale und wenn ich es flashe, dann passiert 
auf dem Display nichts mehr. Es scheint mir irgendein Timing Problem zu 
sein.
Wenn ich dann das originale Hex-File wieder flashe, funktioniert alles 
wunderbar.
Ganz grundsätzlich: wieso erzeugt mein Compiler (neuester WINAVR GCC) 
anderen hex- code ???
Bin ratlos, und bitte um Vorschläge.
Danke!"

Gruß Patric

von Thomas (Gast)


Lesenswert?

Hallo Patric,
leider kann ich dein Hex File nicht verwenden, als ich die vertauschten 
Bits hatte hab ich einfach die Zuordnung geändert, so mußte ich den 
Lötkolben nicht wieder anwerfen. Nu passt es nicht mehr zum "Standard".
Habe es in der MMC.h so geändert:

#define MMC_CS    0
#define MMC_DO    1
#define MMC_DI    2
#define MMC_Clock  3

Wenn du das mal machen willst lade ich es gerne hier rein und teste es 
mal.
Inzwischen habe ich von einem Freund eine 32MB Karte geschnorrt  die 
funktioniert. Die aus dem Telefon hab ich nicht zum Laufen gebracht, 
aber egal.
Bei mir funktioniert nun alles wie es soll, juhu!!
Meine Compiler Version ist avr-gcc (GCC) 3.4.3 .

Gruss aus Hofheim am Taunus und einen schönen Sonntag

Thomas

von Patric N. (patric-)


Angehängte Dateien:

Lesenswert?

Hi Thomas,
habe das Projekt neu compiliert mit der Vertauschung von DO und DI. 
Anbei das hex-file und nachfolgend der output des compilers. Schau doch 
mal, ob der code auch Deinem ATMEGA läuft.
Gruß Patric


Build started 25.11.2007 at 14:08:37
avr-gcc.exe  -mmcu=atmega8 -Wall -gdwarf-2 
-DF_CPU=8000000UL -Os -fsigned-char -MD -MP -MT main.o -MF dep/main.o.d 
-c  ../main.c
../main.c: In function 'cue_file':
../main.c:193: warning: pointer targets in passing argument 2 of 
'message_center' differ in signedness
../main.c: In function 'main':
../main.c:309: warning: case label value is less than minimum value for 
type
avr-gcc.exe  -mmcu=atmega8 -Wall -gdwarf-2 
-DF_CPU=8000000UL -Os -fsigned-char -MD -MP -MT mmc.o -MF dep/mmc.o.d 
-c  ../mmc.c
avr-gcc.exe -mmcu=atmega8  disp.o lcd.o avrfat16.o delay.o main.o mmc.o 
utils.o     -o Bilderrahmen001.elf
avr-objcopy -O ihex -R .eeprom  Bilderrahmen001.elf Bilderrahmen001.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" 
--change-section-lma .eeprom=0 --no-change-warnings -O ihex 
Bilderrahmen001.elf Bilderrahmen001.eep || exit 0
d:\apps\winavr\bin\avr-objcopy.exe: there are no sections to be copied!

AVR Memory Usage
----------------
Device: atmega8

Program:    7494 bytes (91.5% Full)
(.text + .data + .bootloader)

Data:        660 bytes (64.5% Full)
(.data + .bss + .noinit)


Build succeeded with 2 Warnings...

von Patric N. (patric-)


Lesenswert?

Hi,

mein anfänglicher Verdacht, es liegt am Timing hat sich bestätigt. Die 
Routine mswait in lcd.c enthält zwei leere for-schleifen als 
warteschleifen um das Timing zu realisieren. Diese werden von meinem 
Compiler mit der -Os Option wegoptimiert, d.h. es finden überhaupt keine 
Verzögerung im Programablauf statt. Ich habe die Routine umgeschrieben 
und ein volatiles NOP eingefügt (siehe unten). Jetzt funktioniert auch 
das LCD bei mir. Allerdings läuft die SD Karte noch nicht, aber das 
liegt ebenfalls am Timing.

Jetzt frag ich mich nur mit welchen Optionen Ihr compiliert?

Grüsse aus München, Patric


#define NOP() asm volatile ("nop" ::)
void mswait(uint16_t ms)
{
  uint16_t del;
  while(ms--)
  {
    for(del = 0; del < 1000; del++)
      {    NOP();}
  }
}

von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Hi Patric,
ich wollte gerade dein HEX File testen. Hänge hier mal mein MAKE File 
an, da kannst du sehen welche Optionen ich nutze.

Gruss

Thomas

von Patric N. (patric-)


Lesenswert?

Danke Thomas, hat sich erledigt (siehe mein Beitrag oben).
Die SD-Karte läuft auch, lag nicht am Timing, sondern daran, dass ich 
wieder die originale Zuweisung von DI und DO verwendet habe, die auf 
meiner Platine ja vertauscht ist.
Ist aber auch wirklich blöd, DI muss an DO und umgekehrt. Naja, ist wie 
bei RX und TX für serielle Interfaces...

von Avr N. (balze)


Lesenswert?

Hallo zusammen,

da ich noch jungfraeulich bzgl. AVRs bin habe ich mal eine Frage.

Du (M. Bode) schreibst, Du haettest den Spannungsregler auf 2,9 V 
eingestrellt und alle Komponenten laufen so.
Der ATmega8(-16PI) ist aber doch nur fuer 4,5V - 5,5V, richtig?

Funktioniert das sicher?

Waere es nicht sinnvoller einen ATmega8L(-8PU) zu nehmen, auch wenn 
dieser langsamer ist?

MfG,

balze

von Lothar L. (lole)


Lesenswert?

Sinn oder Unsinn, immer eine Frage der Betrachtung. Ich finde das 
Projekt super und werde es bald mal nachbauen. 3s für einen Bildwechsel, 
da werde ich wohl die Hardware-SPI nehmen und den AVR auswählen, der bei 
3V noch richtig Soeed macht. Einen Atmega88 denke ich, der soll bei 3V 
noch 14MHz machen und Pegelwandler entfallen. Da kommen dann vielleint 
0,5s raus, werde ich testen.

von Michi Müller (Gast)


Lesenswert?

Hi, finde das Projekt auch super.

Habe bald alle Teile zusammen und dann werde ich es auch aufbauen.

Wäre prima wenn Du über Deine abänderungen berichten würdest.

von Avr N. (balze)


Lesenswert?

Moin zusammen,

Lothar Lehmann wrote:
> Sinn oder Unsinn, immer eine Frage der Betrachtung. ...

Hmmm, habe ich mich so unverstaendlich ausgedrueckt?

Es macht aus meiner Sicht mehr Sinn einen AVR einzusetzen, der auch fuer 
diesen Spannungsbereich (2,9V) ausgelegt ist und nicht einen einzusetzen 
des Spezifikation weit davon entfernt ist. Beides ATmega8 !!!

ATmega8(-16PI) -> 4,5V - 5,5V Betriebsspannung; max 16MHz
ATmega8L(-8PU) -> 2,7V - 5,5V Betriebsspannung; max  8MHz

Ich weiss nicht wo hier "eine Frage der Betrachtung" steckt.

Zumal ich gerne gewusst haette ob es mit einem "normalen" ATmega8 (eben 
nicht ATmega8L) ueberhaupt zuverlaessig funktioniert.


Lothar Lehmann wrote:
> ...Ich finde das Projekt super und werde es bald mal nachbauen. ...

Ich auch. Deshalb moechte ich den richtigen AVR bestellen. Das ist auch 
der Grund fuer meine Frage.

Lothar Lehmann wrote:
> ...da werde ich wohl die Hardware-SPI nehmen...

Verstehe ich das Datenblatt richtig, hat der ATmega8 (ATmega88) nur 
einen Hardware SPI Port. Dann muesste wenigstens einmal SPI (SD-Karte 
oder Display) per Software realisiert werden, richtig ??

MfG,

balze

von Hauke R. (lafkaschar) Benutzerseite


Lesenswert?

Die L versionen sind meistens (oder immer, bei allen typen?!) nur anders 
getestete Bausteine, sonst völlig identisch. Ich hab hier nen mega16, 
der läuft bei 2,5V noch mit 16MHz

von Avr N. (balze)


Lesenswert?

Danke fuer die (nuetzliche :) Information.

Eine garantie, dass das immer klappt gibt es demnach aber nicht.

MfG,

balze

von Michael U. (amiga)


Lesenswert?

Hallo,

@Avr Noob:

richtig, eine Garantie gibt Atmel dafür nicht...

Atmel garantiert eben beim L-Typ, daß er im gesamten Spannungs- und 
Temperaturbereich die Parameter des Datenblattes einhält und spielt.

In meinem Prüfstft steckt auch ein Mega8 (ohne L), der geht mit 2,8V und 
16MHz stabil bei üblichen Raumtemperaturen und ohne CKOPT gesetzt.

Wenn er es macht, maacht er es auch weiterhin. Solche Basteleien 
entstehen ja meist erstmal als Steckbrettaifbau o.ä. mit Teilen, die 
gerade vorhanden sind, da landen dann die Teile auch im einzigen 
fertigen Exemplar und spielen eben.

Die wenigsten, die hier was veröffentlichen, machen das, um eine 
nachbausichere Anleitung mit allem drumrum zu erstellen.

Es hindert Dich also niemand daran, einen Mega8L zu nehmen, um auf der 
sicheren Seite zu sein.

Ich muß den Kram auch unbedingt mal zusammenlöten, liegt alles schon 
rum...

Gruß aus Berlin
Michael

von Avr N. (balze)


Lesenswert?

Hallo

@Michael: THX!

Das bedutet dann auch, dass der mega8L evtl. auch mit 16Mhz laufen 
koennte?!

MfG,

balze

von Lothar L. (lole)


Lesenswert?

Hallo,
@Avr Noob
wenn Du noch überlegst, was Du bestellst, schau Dir auch die neueren 
Typen an. In dieser Klasse setze ich z.Z. den AtMega88 ein, der geht 
auch bis 20MHz ohne Übertaktung, laut Atmel "Safe Operating Area". Mit 
Betrachtungsweise meinte ich; soll der Bildwechsel so schnell wie 
möglich sein, dann muss Vcc evtl. höher als 3V sein, dann sind 
Pegelwandler nötig. Beschränkst Du Dich auf 3V, schaffst Du die 16- oder 
beim AtM88 die 20MHz nicht. Das Display wird im S65 mit 14MHz SPI-Clk 
betrieben (laut Christian 13MHz). Dein Prozessor müsste dann 28MHz 
schaffen. Wie ich in oberen Posts gelesen habe, werden die 
Grenzfrequenzen auch bei niedrigen Vcc erreicht, schön zu wissen.
Noch zum SPI, Du kannst mehrere SPI Geräte an einem Port betreiben. Um 
die Einheiten zu selektieren gibt es das /CS.
Grüsse
Lothar

von Avr N. (balze)


Lesenswert?

Hallo zusammen

@Lothar: Danke fuer die Infos !

Das Gebiet ist eben doch noch sehr neu fuer mich :)

MfG,

balze

von Lothar L. (lole)


Lesenswert?

Na dann los, probieren ist besser als....
und immer daran denken, den Takt richtig zu definieren. Die Delays 
während der Initialisierung sind zeitkritisch. Vielleicht doch erst mal 
die SIMPLE.C von Christian zum Fliegen bringen. Wenn die nicht läuft, 
hast Du schon genug Probleme. Ich habe einen LA gebraucht, den hat aber 
nicht jeder. Also, viel Erfolg.
Grüsse
Lothar

von Marc M. (bytewood) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

als Weihnachtsgeschenk habe ich diesen Bilderrahmen auf einer geätzten 
Platine aufgebaut.

@ M. Bode -> geniales Teil

In der angehängten ZIP-Datei ist der Schaltplan als .png und Eagle .sch 
enthalten.

Zur Schaltung:
Supply X1-1 und X1-2 sind die Anschlüsse für eine Wandwarze, X1-3 und 
X1-4 für eine Batterie.
Ich betreibe den Bilderrahmen über eine 9V Blockbatterie mit 
nachgeschaltetem Boost-Konverter (auch über einen MC34063 -> nicht in 
der Zeichnung), der die erforderliche Spannung für die 
Hintergrundbeleuchtung erzeugt (ca. 12V).
http://www.nomad.ee/micros/mc34063a/index.shtml

Der Buck-Konverter in der Zeichnung wird mit dem Poti R2 auf ca. 3,5V 
eingestellt.
Die 2,9V für das Display werden über die Diodenstrecke D4 aus den 3,5V 
gewonnen. Aus D5 ca. 2,3V für die 1,8V- Versorgung.
T1 ist Teil der Konstantstromquelle für die Hintergrundbeleuchtung und 
liefert ca. 18mA.
An PB0 hängt bei mir ein Taster, der einen schnellen Bildwechsel 
ermöglicht, oder den Bildwechsel verhindert.
Die Widerstände R4-R8 dienen als Strombegrenzung, da 3,5V <-> 2,9V.
Mit vertauschtem DI und DO lief der Bilderrahmen auf Anhieb.
Leider gibt es keine kleinen (<128mB) SD/MMC-Karten mehr zu kaufen.
Der Bilderrahmen läuft bei mir mit einer 512MB und 1GB SD-Karte ohne 
Probleme.
Der Oszillator Q1 ist ein 9,8304 MHz -> habe leider keinen schnelleren.

Falls ich den Bilderrahmen irgendwann nochmal aufbauen sollte, dann 
werde ich den mini-SD-Adapter als Fassung verwenden und schön auf der 
Bestückungsseite aufkleben...

Als Weihnachtsgeschenk ist das doch ideal, oder?

Have Fun!

von Marc M. (bytewood) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hier noch ein Bild dazu

von Marc M. (bytewood) Benutzerseite


Angehängte Dateien:

Lesenswert?

Leider ist es schlecht an die SD-Karte ranzukommen, daher die Idee, den 
Mini-SD-Adapter als Einschub zu benutzen, auf der Bestückungsseite 
aufzukleben und die wenigen Leitungen auf die Lötseite zu führen... 
(beim nächsten mal)

von Michael S. (snickers)


Angehängte Dateien:

Lesenswert?

Da ich heute mal etwas Zeit hatte, habe ich mich mal an den 
Steckplatinenaufbau des digitalen Bilderrahmens begeben.
Nach ein paar kleinen Flüchtigkeitsfehlern meinerseits läuft der Rahmen 
nun Problemlos.
Echt super Sache.
Jetzt werde ich mich auch mal daran begeben einen Schaltplan sowie ein 
Layout zu erstellen.

von Gast (Gast)


Lesenswert?

Ein Schaltplan wäre nett :-)

Ich habe die Schaltung nachgebaut, es funktioniert allerdings nicht. Das 
Display bleibt ohne Text oder Bild.

von Michi Müller (Gast)


Lesenswert?

Hi,

wenn Du nach dem Schaltplan von  Marc Meise gehst, musst Du bei der 
lcd.h folgendes ändern :

von
#define LCD_DAT       3
#define LCD_CLK      5

in

#define LCD_DAT       4
#define LCD_CLK      3

ändern. (Oder halt umstecken).
Hatte es auch übersehen. Dort auch noch die Taktfrequenz dem µC anpassen 
( ich habe den internen 8 MHz genommen ).
Danach sollte schon mal das Display laufen.

Leider bin ich über die Feiertage zu nix gekommen, sonst könnte ich Dir 
schon fertige Sachen anbieten.

von Michi Müller (Gast)


Angehängte Dateien:

Lesenswert?

So, habe mal eben was "hin geklascht".
So müsste die Beschaltung vom AVR nach dem Source vom OP sein.
Alle Angaben wie immer ohne Gewähr ...

von Pete (Gast)


Lesenswert?

Ach so, in dem zip ist ein Schaltplan dabei gewesen, das habe ich nicht 
gesehen.

Ich habe auf die Widerstände R4-R8 verzichtet und alles an 2,8V 
angeschlossen mit internem 8Mhz Takt.

Außerdem sagt mir mein Datenblatt, dass Pin 8 des Displays N.C. ist, 
wobei ich  teilweise auch 1,8V gelesen habe. Es sieht allerdings nicht 
so aus, als ob Pin8 auf dem Display auch benutzt wird. Gibt es hier 
Erfahrungen ?

Pete

von Michi Müller (Gast)


Lesenswert?

Also bei mir muß der Pin beschaltet sein. Scheint wohl da irgendwelche 
unterschiede zu geben ...
Habe bei mir alles auf 3,3 Volt laufen und auch auf die Widerstände 
verzichtet. Klappt auch.

von Jörg P. (zwiebackfraeser)


Lesenswert?

Hallo,
ich bin neu hier im Forum und bei den µC's, bin im Besitz eines
STK 500 und habe schon ein paar kleiner Sachen hier aus dem Tutorial
ausprobiert.
Jetzt wollte ich gern mal das Siemens Display anschließen, habe aber bei 
den ersten Testläufen nicht beachtet die VTarget auf 2,8 V runter zu 
setzen
d.h. auf den Controller vom Display sind 5 V gekommen. Ist das Display 
jetzt wohl gestorben, ausser der HGB (12V über externes Netzteil)
tut sich nichts.

Gruß
J.

von Avr N. (avrnix) Benutzerseite


Lesenswert?

Das Display wird kaputt sein 5V ist viel, soviel max 3,3V typ. 2,9V
HGB max 10..11V. ( LS020... )

http://www.comwebnet.de - BASCOM Projekte S65-Osziloskop, Wetterstadion 
etc

von Michael U. (amiga)


Lesenswert?

Hallo,

vorne weg mein Standardsatz:
Ich habe mit C eigentlich nicht viel am Hut, programmiere selbst 
(bisher) nur ASM...

Eigentlich wollte ich den Bilderrahmen nur schnell zusammenlöten und 
benutzen.

Nun die etwas provokatorische Frage hat irgendjemand ein Source, die 
wirklich auf einem Mega8 in der Beschaltung von Marc Meise vom 
20.12.2007 11:38 funktioniert??? Wenn möglich auch noch mit einem 16MHz 
Quarz.

Meine bisherigen Erkenntnisse:
der Originalsource von M. Bode ist für einen C-Einsteiger wohl völlig 
unbrauchbar.

In mehreren Programmteilen eigene delay-Funktionen, die teilweise von 
Compiler zu Recht wegotimiert werden (lcd.c).

Die Taktfrequenz wird an mehreren Stellen unter verschiedenen Namen 
definiert.

Portzuordnung der MMC ist mehr als mißverständlich, MMC_DI bzw. DO 
bezieht sich nicht auf die Karte, sind also vertauscht.
MMC_CS wird mal per Name und mal hardcoded mit Bitnummer angesprochen.

Die MMC-Karte wird beim Reset mit vollem Speed angesprochen, eigentlich 
darf dort der SPI-Takt nur maximal 128kBit/s sein (Datenblatt 
MMC-Cards).
Erst nach dem Umschalten auf SPI-Mode darf hochgeschaltet werden.
Das dürfte also nur zufällig gehen.

Ich habe zum Hardwaretest jetzt mal schnell Display-Test-Routinen in ASM 
geschrieben, alles ok.
Meine alten MMC-Routinen (ASM) reden auch mit meiner Karte.

Eigentlich wollte ich jetzt nicht noch die FAT16 in ASM schreiben, 
vermutlich wäre ich da aber schneller fertig, als wenn ich mich durch 
die ganzen C-Sourcen wühle und alle Ungereimtheiten suche...

Die mswait() in lcd.c habe ich jetzt erstmal repariert, Display meldet 
sich, SD-Card wird aber als nicht gefunden gemeldet.

Ich weiß nicht, ob ich mich da wirklich noch durchwühle, eigentlich 
wollte ich es nur schnell zusammenlöten........... ;-((

Gruß aus Berlin
Michael

von Marc M. (bytewood) Benutzerseite


Angehängte Dateien:

Lesenswert?

@ Michael U.

>Nun die etwas provokatorische Frage hat irgendjemand ein Source, die
>wirklich auf einem Mega8 in der Beschaltung von Marc Meise vom
>20.12.2007 11:38 funktioniert???

Ja, ich :-))

Ich habe meine Schaltung noch etwas verändert, damit Batteriebetrieb und 
Netzbetrieb (9V bis 12V AC Wandwarze) möglich sind.

Ich hoffe, dass der Thread-Starter nichts dagegen hat, dass ich hier 
meine Schaltung und den von mir (auf meine Schaltung) angepassten 
Quellcode poste.

Zu Deinen Erkenntnissen:
OK, der Quellcode ist einwenig wirr und nicht wirklich dokumentiert - 
aber er läuft doch :-))

Timings und SPI: Jep, ich denke hier ist ein wirkliches Problem, das die 
MMC bei höheren Taktfrequenzen einfach abhängt.

Mein schnellster Quarz ist en 9,8304 MHz, der so herumlag - also habe 
ich den genommen.
Der Bildaufbau ist halt einwenig schneller (Überblendeffekt) als mit dem 
internen 8Mhz des Mega8.

Meine Motivation dieses Teil zu bauen war:
Weihnachten, eh nicht viel Zeit, freude machen wollen, low budget, 
Quellcode vorhanden, Ansteuerung einigermaßen ersichtlich.

Ich hatte mir zwei SD-Karten (512MB und 1GB) Karten verschiedener 
Hersteller besorgt und beide laufen ohne Probleme.
(Scheinbar gibt's heutzutage keine kleineren mehr...)

>wollte ich es nur schnell zusammenlöten...........
Jetzt sollte es ja klappen ;-)

von Michael U. (amiga)


Lesenswert?

Hallo,

erstmal vielen Dank für Deine schnelle Reaktion. :-)))

Erstmal das Positive: startet auch mit 16MHz ohne Probleme, ich habe 
trotzdem erstmal 8MHz raufgesteckt, sicher ist sicher.

Das weniger Gute: keine .bmp Dateien. :-(

Ich habe im Moment nur 2 gleiche 128MB-MMC-Cards hier.

Ich habe mal die eine Fehlermeldung in "Kein MBR" geändert (Return 0x1A 
wenn die Kennung 0x55AA nicht gefunden wurde) und auf einer Karte mit 
WinHEX die Kennung auf 0x0000 gesetzt.
Klappt, diese Karte "kein MBR", die andere "keine .BMP".
Karte Reset, Init und Sektor lesen geht also.

Muß sich also in der FAT-Struktur irgendwie verlaufen...
Laut WinHEX ist die Karte FAT16, ich muß da wohl jetzt doch auf die 
Suche gehen, was am Format meiner Karte nicht stimmt.

Mal schauen, ob ich da auf die Schnelle ein paar Debugausgaben ins 
Display bekomme, da es 2 identische Karten sind, kann ich ja gut am PC 
mit WinHEX vergleichen, was wo gelandet ist.
Wird aber wohl erst morgen was, mal schauen.

Vielleicht nehme ich das doch als C-Übung und baue die Teile mal 
ordentlich neu zusammen. ;-)

Gruß aus Berlin
Michael

von Michael U. (amiga)


Lesenswert?

Hallo,

wollte nur noch anmerken, daß es jetzt (erstmal) läuft.
Karte mit 7tools (war das erste, was ich fand...) partitioniert, war 
dann erstam eine ordentliche Partition.

Ging trotzdem nicht, in avrfat16,c eingebaute -1 (warum???)
//  ((BPB_RootEntCnt*32) + (bytes_per_sector-1))/bytes_per_sector;
  ((BPB_RootEntCnt*32) + (bytes_per_sector))/bytes_per_sector;
wieder ausgebaut, dann ging das erstmal.

Format verschoben, Farben falsch.
Keine Ahnung, warum ein BMP-Header 36 Byte lang sein soll, er ist 
mindestens 54 Byte lang, eigenlich steht aber der Offset zu den Daten im 
Header, wird aber nicht ausgewertet...

Habe ich jetzt erstmal nur für meine Bilder fest korrigiert, mache ich 
mich mich ein anderes Mal drüber her.

Nochmal Danke für Deinen Source,  Marc Meise, der läuft zumindest vom 
Timing mit 16MHz stabil. :-)

Gruß aus Berlin
Michael

von Simon Lehmayr (Gast)


Lesenswert?

Info Hardware-SPI:
Der mega8 und seine Nachfolger 48,88,168 können neben der HW-SPI auch 
den USART im SPI-Modus betreiben. Also stehen 2 vollwertige HW-SPI zur 
Verfügung. Maximale SCK-Rate ist dabei SysClock/2.
Diese Power machen sich meine SPI-Projekte gerne mal zu nutze.

von Tamme D. (tamme)


Lesenswert?

Simon Lehmayr wrote:
> Info Hardware-SPI:
> Der mega8 und seine Nachfolger 48,88,168 können neben der HW-SPI auch
> den USART im SPI-Modus betreiben. Also stehen 2 vollwertige HW-SPI zur
> Verfügung. Maximale SCK-Rate ist dabei SysClock/2.
> Diese Power machen sich meine SPI-Projekte gerne mal zu nutze.

müssten die sich nicht auch so verbinden das man mit vollem SysClock 
statt mit SysClock/2 arbeiten könnte?

von Mi G. (ducky)


Lesenswert?

Moin ...

also ich habs auch mal nachgebaut .... super genial

DANKE für eure Mühe ...

hatte zwar am Anfang leicht Probs .. falsche Widerstände drin ( meine 
Dummheit ;) )
und die hier schon oft erwähnten Probs mit der SDCard .. aber jetzt is 
alles schick ..
bei mir läuft alles mit ATmega88 20AU falls es jemanden interessiert ..
als Eingangsspannung geht von 2,2 -7,5 Volt alles, also einfache NiMH, 
Liion oder halt nen Netzteil ...

Gruß Ducky

von Mi G. (ducky)


Lesenswert?

Moin ...

hat schon irgendjemand das LPH Display am laufen ???

Gruß Ducky

von Nils R. (nrdesign)


Lesenswert?

Hallo.

Hat schon jemand eine Lösung, wie man P03... Displays benutzen kann?

Ich habe hier nur eins mit diesem Nummernanfang und möchte nicht extra 
ein neues kaufen :)

Gruß,

-=NrDesign=-

von Christian B. (drunkenmog)


Lesenswert?

Hallo zusammen mich würde auch brennend interessieren ob man es mit 
einem PO3.. zum laufen bringt da ich in der Bucht auch kein anderes mehr 
finde. :(

Gibt es eigentlich auch eine Tabelle wo man für jede Farbe die passende 
Hexzahl für z.B. den Hintergrund findet unter google finde ich solche 
nur für 32-bit Farben aber nicht für 16-bit. Oder kann man die anpassen?

Fragen über Fragen

Danke für die mühe wenn ich was übersehen habe sorry

von Avr N. (balze)


Lesenswert?

@Christian Brandl:
Sorry Christian,

aber wozu brauchst Du eine Tabelle??
Die 5 MSBit stehen fuer den Rotanteil der Farbe,
Die mittleren 6 Bit fuer den gruenen und die 5 LSBit stehen fuer den 
blauen.
1111 1000 0000 0000 -> 0x F800 -> Rot
1111 1111 1110 0000 -> 0x FFE0 -> Gelb
0000 0111 1110 0000 -> 0x 07E0 -> Gruen
0000 0111 1111 1111 -> 0x 07FF -> Cyan
0000 0000 0001 1111 -> 0x 001F -> Blau
1111 1000 0001 1111 -> 0x F81F -> Magenta

Kleiner Tipp mit Windows Bordmitteln:
OEffne Paint (wuerg) Menue->Farben->Palette bearbeiten
Dann Farben definieren.
Hier kannst Du jetzt Deine gewuenschte Farbe auswaehlen.
Die Ergebnisse werden ind 8 bit je Farbe angezeigt.
Wert Rot (8 bit) dividiert durch 8 -> Wert Rot (5 bit) (<= 31)
Wert Gruen (8 bit) dividiert durch 4 -> Wert Gruen (6 bit) (<= 63)
Wert Blau (8 bit) dividiert durch 8 -> Wert Blau (5 bit) (<= 31)

Wert Roet (5bit)*2048 + Wert Gruen (6bit)* 32 + Wert Blau = gewuenschte 
Farbe in 16bit Darstellung

MfG,

balze

von Christian B. (drunkenmog)


Lesenswert?

@Avr Noob
Vielen dank für diese Info jetzt weis ich wie die Farbe zusammengesetzt 
wird juhu!! das ist mit Paint echt einfach das dann zusammenzustellen.
Danke schön.

Aber wegen der Benutzung des PO3.. weis keiner bescheid oder??
Weil drehen könnte ich das bild ja schon bevor ich es auf die SD drauf 
mache aber geht dann die Ansteuerung des PO3?? Oh man ich glaub ich las 
lieber die Finger weg :-(

DANKE!

von Avr N. (balze)


Lesenswert?

Hallo Leute,

ich braeuchte mal die Untersturtzung von den MMC/SD Profis.

Ich habe den Bilderrahmen auch nachgebaut, habe jetzt aber ein Problem.

Bei FAT_initFat16 bekomme ich immer einen leeren FAT_buffer zurueck.
Mit leer meine ich dass dieser mit Nullen gefuellt ist.

FAT_Read() (bzw MMC_Read() ) laeuft nachweisllich bis in die Schleife, 
in der mmc_Sbuf (und damit (hoffentlich) auch FAT_buffer) gefuellt wird. 
Also hier hinein:
1
for(sec=0;sec<512;sec++)
2
{
3
   mmc_sbuf[sec] = SpiByte(0xff);
4
}

Die CD Karte(n) habe ich mit mit WinHex angesehen und es steht dfinitiv 
etwas im ersten Sektor (und auch 0x55 0xAA an Position 511 und 512)

Die SD Karten sind mit FAT16 (!) formatiert.
Es handelt sich um eine Toshiba 1GB und eine Canon 16MB.

Ich wuerde mich ueber jeden Hinweis freuen.

Schoenen Gruss, schoene Weihnachten und einen glueckliches und gesundes 
neues Jahr,

Balze der AVR Noob

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.