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).
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
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!)
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
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
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
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
> 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?
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
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 ;-)
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??
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
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.
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
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
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
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
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...
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();}
}
}
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...
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
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.
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.
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
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
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
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
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
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!
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)
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.
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.
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
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.
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.
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
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
@ 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 ;-)
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
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
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.
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?
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
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=-
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
@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!
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
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