Archiv verlassen und diese Seite im Standarddesign anzeigen : MMC Karte mit Bascom
robby-fant
20.08.2006, 16:55
Hallo, habe ein AVR16/16-Board und möchte eine MMC-Karte mit Bascom ansprechen. Nur einfach lesen und schreiben (512Byte Sendungen). Die Karte ist schon angeschlossen mit 3,3 Volt usw.
Ich möchte es ohne AVR-DOS durchführen, also ohne eine Lib.
Du brauchst aber dazu auf jeden Fall die entsptrechende Treiber-Library und Config-File für MMC. Diese sind in der BASCOM-AVR Installation enthalten oder Du kannst diese von http://members.aon.at/voegel/Downloads.htm herunterladen.
Du kannst dann mit den Kommandos:
DriveReadSector
und
DriveWriteSector
mit Angabe der SRAM Speicheradresse und der MMC-Sektornummer 512 Bytes lesen und schreiben.
robby-fant
01.09.2006, 15:50
Drivewritesector(adresse,1 )
Ich bekomme die Meldung : Unknown statement
Was ist hier falsch.
Wo gibt es ein Beispiel, mit Anwendungen der Sectoren?
Hier ein Beispiel, welches Sektoren von der MMC/SD Karte einliest und auf der Seriellen Schnittstelle ausgibt.
Bei den Funktionen DriveReadSector und DriveWriteSector ist zu beachten, dass ein Adresspointer übergeben wird.
Das gibt den Funktionen die Möglichkeiten, jeden Bereich im SRAM auf die Karte zu schreiben, bzw vor dort zu überschreiben, ohne dass dort eine Variable deklariert sein muss. Soll jedoch in eine Variable (Byte-Array mit 512 Bytes) geschrieben werden, muss man zuerst mit VarPtr die Adresse auslesen (siehe dazu das Beispiel)
$Regfile = "M162def.dat"
$Crystal = 8000000
$HWStack = 32
$SWStack = 32
$FrameSize = 64
$Baud = 9600
Declare Sub Sramdump(byval pwsrampointer As Word , Byval Pwlength As Word)
$Include "Config_MMC.bas"
'$Include "Config_XRAMDrive0.bas" ' Zum Testen mit dem Simulator
If gbDriveError <> 0 then
Print "MMC/SD Initialisierung fehlgeschlagen"
end
Endif
Dim bError as Byte
Dim aBuffer(512) as Byte ' SRAM-Bereich für den Transfer
Dim wSRAMPointer as Word ' Adress-Pointer für den Drive... Routine
Dim lSectorNumber as Long ' Variable für Sektor-Nummer
' Adresse des Buffers in die Variable
wSRAMPointer =VarPtr(aBuffer(1))
' Die ersten 100 Sektoren ausgeben
For lSectorNumber = 0 to 100
bError = DriveReadSector( wSRAMPointer , lSectorNumber)
' Konnte der Sektor eingelesen werden?
if bError > 0 then
Print "Drive Fehler: " ; bError ; " bei Sektor " ; lSectorNumber
exit for
endif
Print "Sektor " ; lSectorNumber
' Sektor ausgeben
SRAMDump wSRAMPointer, 512
next
end
Sub Sramdump(byval pwsrampointer As Word , Byval Pwlength As Word)
' Dump a Part of SRAM to Print-Output #1
' pwSRAMPointer: (Word) Variable which holds the address of SRAM to dump
' pwLength: (Word) Count of Bytes to be dumped (1-based)
Local Lsdump As String * 16
Local Lbyte1 As Byte , Lbyte2 As Byte
Local Lword1 As Word , Lword2 As Word
Local Llong1 As Long
If Pwlength > 0 Then
Decr Pwlength
For Lword1 = 0 To Pwlength
Lword2 = Lword1 Mod 8
If Lword2 = 0 Then
If Lword1 > 0 Then
Print " " ;
End If
End If
Lword2 = Lword1 Mod 16
If Lword2 = 0 Then
If Lword1 > 0 Then
Print " " ; Lsdump
End If
Llong1 = Lword1
Print Hex(llong1) ; " " ;
Lsdump = " "
Lbyte2 = 1
End If
Lbyte1 = Inp(pwsrampointer)
Incr Pwsrampointer
Print Hex(lbyte1) ; " " ;
If Lbyte1 > 31 Then
Mid(lsdump , Lbyte2 , 1) = Lbyte1
Else
Mid(lsdump , Lbyte2 , 1) = "."
End If
Incr Lbyte2
Next
Print " " ; Lsdump
End If
Incr Pwlength
End Sub
Für den Transfer vom SRAM auf die Karte ist die Funktion DriveWriteSector in gleicher Weise zu verwenden.
kolisson
04.02.2007, 17:30
hallo ihr..
das ist zwar ein uralter beitrag, aber er bezieht sich genau darauf was ich versuche (... ufff seit tagen).
ich habe genau den o.g. quelltext genommen. dann habe ich eine kinston 128mb - SD-karte für 3,3 volt.
als pegewandler von einem mega32 aus verwende ich 1kohm reihenwiderstände und z3,3 dioden gegen masse.
im pc funzt die karte prima...
doch mit dem bascom proggi gibts schon ärger mmc-init. karte kann also nicht angesprochen werden.
hat das hier schonmal jemand hingekriegt ?
gibts noch tolle tips ?
gruss kolisson
hat das hier schonmal jemand hingekriegt ?
gibts noch tolle tips ?
Moin,
habe Heute das erste mal das komplette AVR-DOS ausprobiert und bin begeistert. Nach stundenlangem Probieren ohne Erfolg, lag es an einem dringend benötigtem Puffer-Elko direkt an der SD-Karte.
Danach arbeitete alles hervorragend.
MC ist ein M128 mit 5V, Levelshifter -> 74LS07 und ein einfacher LD-Spannungsregler 3,3V.
Falls Du noch nicht weitergekommen bist - schreib mal!
Vielleicht können wir Dein Problem zusammen lösen?
Viele Grüße,
Bruno
kolisson
15.02.2007, 22:16
hallo bruno. und vor allem danke für die antwort.
dieses thema scheint ja hier nicht so gängig zu sein. ich habe am 4.2 gepostet und du warst der einzige der was dazu zu sagen hat (am 13.2.)
nun ja .. mitlerweile bin ich mit dem problem klar geworden.
das bascom arbeitet nicht vernünftig mit dem mega 644 zusammen.
mit mega 32 funzt das alles im prinzip .. hier ist nur der sram zu klein.
du mit dem 128er bist da gut bedient.. ich find den halt von der bauform abstossend.
im zuge der recherchen und fehlersuche habe ich (glaube ich) jetzt aber das mmc-protokoll verstanden und werde die nötigen routinen dann per inline-assembler machen.
gruss
robby-fant
25.04.2007, 20:44
mit mega 32 funzt das alles im prinzip .. hier ist nur der sram zu klein.
wieso sram zu klein, hast doch 2 kbyte und du brauchst doch nur 512byte für die datenübertragung ohne dos bei der mmc.
mfg
kolisson
25.04.2007, 22:04
ich wollte halt fat schreiben, damit ich das am pc auslesen kann.
gruss
robby-fant
26.04.2007, 21:49
http://www.mikrocontroller.net/forum/4
hier haben die das im avr32, aber mit winavr-c.
vielleicht kann mal einer das avr-dos von bascom mal für den avr32 ummodeln.
Dani-Bruchflieger
29.04.2007, 10:40
habe Heute das erste mal das komplette AVR-DOS ausprobiert und bin begeistert. Nach stundenlangem Probieren ohne Erfolg, lag es an einem dringend benötigtem Puffer-Elko direkt an der SD-Karte.
Danach arbeitete alles hervorragend.
MC ist ein M128 mit 5V, Levelshifter -> 74LS07 und ein einfacher LD-Spannungsregler 3,3V.
Hi,
Hab sowas auch mal probiert, und nicht zum laufen bekommen - hatte damals BC847 Transistoren als Levelshifter nach einer vorgegebenen Schaltung aufgebaut, danach den M128L nur auf 3,3V laufen lassen und ohne Levelshifter versucht - jedesmal konnte die Karte nicht initialisiert / angesprochen werden.
Hatte auch die komplette Bascom AVR-Dos Demo compiliert und aufgespielt, wo man per RS232 vom PC aus bedient und befehle gibt.
Jetzt meine Fragen zu deinem Post:
1. was für ein Puffer-Elko? - hab in keiner Schaltung sowas gefunden.
2. Der 74LS07 arbeitet nur in 1 Richtung (5V->3,3V? ) die Rückrichtung verdrahtest du direkt ohne Levelshifter, korrekt?
Hatte mir extra kleine Experimentierplatinen geätzt, mit denen so ein Aufbau schnell mittels Steckleitungen / Flachbandkabel mit Stiftleiste realisiert werden kann. Ich hatte auch die Datenleitungen zwischen Karte und µC sehr kurz gehalten.
Grüße Dani.
darwin.nuernberg
29.04.2007, 11:59
MC ist ein M128 mit 5V, Levelshifter -> 74LS07 und ein einfacher LD-Spannungsregler 3,3V.
Viele Grüße,
Bruno
Hallo Bruno,
ich äregere mich auch gerade mit den Grundlagen eines Level Shifters herum.
(Thread "3V/5V Mischen" finde ich gerade nicht da die Suchmasch. nicht funzt)
Wie hast Du denn den 07'er beschaltet
(ist wohl ein open Collector- Type oder?)
Auf ulrichradig.de (http://www.ulrichradig.de/) -> AVR -> MMC-SD
ist auch einiges zu finden wie man eine SD-karte ansteuert und
ein (diskreter) Levelshifter wird auch gezeigt,
Programmierung und Nutzung der MMC mit einem AVR wird auch erklärt.
Hallo Dani & Darwin,
schön, dass es hier im Thread noch weitergeht. Dachte schon, Niemand bastelt mehr mit SD/MMC 8-[
Zum Schaltplan des Levelshifters verlinke ich hier direkt zum Autor: LINK (http://www.umnicom.de/Elektronik/Projekte/Wetterstation/Mikrokontroller/Hardware/5-Mikro3.png)
Hier zwei Bilder meines wüsten Versuchsaufbaus :-b
http://www.hydroworld.de/forum/mmc_interface_01.jpg
http://www.hydroworld.de/forum/mmc_interface_02.jpg
Beim letzten Bild erkennt man deutlich die dicke gelbe Beule - das ist mein Abblock Kondensator. Der ist sehr dicht an den Anschlüssen der SD-Karte! Als Kapazität habe ich 330µ/6.3V eingesetzt (weil der gerade hier rumlag) - es gehen sicher auch kleinere Kondensatoren. Interessant war, dass ohne diesen Kondensator nichts ging. Ein Stück unter dem Kondensator sieht man dann noch den 3.3V Festspannungsregler (ein ganz billiger von TS) im SO223 Gehäuse.
Viele Grüße,
Bruno
darwin.nuernberg
29.04.2007, 17:08
Ja ich denke das liegt in meinem Bereich (nicht alles Diskret).
Ich hate da einen MAXIM im Auge, aber der berteffende Baustein (type weis ich gerade nich) hat einen noch engeren Pitch als der M128 und ist auch scheinbar nicht so einfach zu bekommen.
PS: Deine Platinen machen einen sehr ordentlichen EInndruck (Sauber aufgebaut)
Dani-Bruchflieger
30.04.2007, 14:48
Hi Bruno,
find ich fast schon lustig, daß du deinen M128 ähnlich gemacht hast wie ich... Ich habe ihn auch auf 4 Stiftleisten a 16 Pins aber im RM2,0 verteilt und zwar so, daß die Ports zusammnhängend kommen. Des weiteren sind direkt am M128 noch die Buchsenleiste fürs ISP und eine Buchse, für wechselbare Quarze / Oszillatoren - auf dem Foto steckt dort eine Quartzplatine drin.
Unten links ist mein erster Versuch mit diskreten Levelshifter ber Transistoren zu sehen (Schaltplan war glaub ich von U.Radig) inklusive per Cu-Lackdraht verbunden eine Buchsenleiste ohne Levelshifter. Der Sockel ist ein 4 in 1 von Conrad und das Seitlich abstehende Teil ist ein LM317 100mA. Darüber die kleine Version mit einem MMC/SD Sockel von Reichelt nur direkt ohne alles andere drumherum.
Ganz oben noch die Platinen für Versuchsaufbauten mit Mega8 bzw. Mega16 Prozessoren. Dummerweise hab ich aber immer nur eine Buchsenleiste per Port verfügbar - besser wären 2 Leisten pro Port gewesen...
Ich werde mal probieren, einen größeren Kondensator direkt neben den MMC/SD Sockel zu löten und vielleicht ist noch etwas Platz für einen 100nF SMD unter der Karte direkt an den Sockelpins... - allerdings hat mein Schlepptop letztens den Geist aufgegeben und mein PC hat keinen LPT-Anschluß mehr - brauch erst einen USB->LPT Wandler, der auch in Vista64 läuft...
Hallo Dani,
dann drück ich feste die Daumen, dass es bei Dir auch gehen wird!
Kommst Du aus dem RC-Modellflugbereich?
Viele Grüße,
Bruno
Dani-Bruchflieger
30.04.2007, 22:07
Jepp,
bin meist im RC-Line Forum unterwegs. Und dort im Bereich "Funken! Aber endlich sicher". Da gehts darum, auf Basis der 2,4GHz Funkübertragungsmodule sich selbst eine Fernsteuerung für Modellflugzeuge etc. zusammenzubauen.
Naja, hab da aber auch noch ein paar kleinere Probleme meine WT11 Blauzahnmodule zum Komunizieren zu überreden... Demnächst werde ich 2 Xbee-Pro Module bekommen - hoffendlich sind die einfacher zu handeln...
Grüße Dani.
Demnächst werde ich 2 Xbee-Pro Module bekommen - hoffendlich sind die einfacher zu handeln...
Hi Dani,
ist zwar OT (sorry), aber ich kann Dir sagen -> sie sinds!
Ich spiele seit einer Weile mit den XBee herum und kann nur positives berichten (hatte ein Starterkit gekauft). Du wirst begeistert sein.
Viele Grüße,
Bruno
darwin.nuernberg
02.05.2007, 00:06
So, nachdem die Suche wieder funzt, habe ich auch meinen Thread zum Ansteuern von SD-MMC Karten wieder gefunden (Hurra)
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=29769
Der bezieht sich rein auf das Pegelwandlungs-Problem.
Mittlerweile habe ich doch die Version von Ulrich Radig allerdings etwas abeändert.
In Kürze werde ich mit dem Testen anfangen...
Mittlerweile habe ich doch die Version von Ulrich Radig allerdings etwas abeändert. In Kürze werde ich mit dem Testen anfangen...
Moin,
da mich immer die Beweggründe bei den Lösungen interessieren, möchte ich Dich fragen, warum Du die diskrete Lösung mit dem Transistorfriedhof bevorzugst und nicht den Hexinverter in SO14 und 4 Widerstände nimmst?
Und warum es der LM317 sein muss, statt einem 3,3V Festspannungsregler? Wiegesagt - es liegt mir fern jemandem etwas auszureden, nur der Grund Deiner Entscheidung ist schon interessant!
Viele Grüße,
Bruno
darwin.nuernberg
02.05.2007, 19:06
@Bruno Pisarek
Tja, also ... hmmm *grübel*
warum Du die diskrete Lösung
Zum einen wegen der Verfügbarkeit der betreffenden Bauteile.
Beim Reichelt gibts keinen 74LS07 mehr (???) keine Ahnung warum,
andere Treiber mit open Colletor hab ich auf die schnelle nicht gefunden und dann auch keine Lust mehr gehabt nach Ersatz zu suchen ( da ziehe ich in Eagle lieber Strippen ).
Und dann war's mir einfach zu blöd nach Bauteilen zu suchen welche man dann doch wieder nicht bekommt,
wie sich später heraustellte, oder deren Verarbeitung schwierigkeiten bereitet,
weil diese so klein sind dass die schon beim auspacken oder Anblick des Lötwerkzeuges vor Schreck einen Kurzschluss bekommen.
Von den BC 546 habe ich Massenweise und gute Erfahrungen damit.
Zum anderen spare ich kaum Platz ( jaaaa ist ein Holzhacker Spruch ).
warum es der LM317 sein muss
Der LM317, tja weil ich auch noch welche rumfliegen habe.
Warum muss es immer ein spezialbauteil sein, wenn Standardbauteile den gleichen Zweck erfüllen?
Außerdem, wenn mal was kaputt geht, und das ist meist immer dann wenn die Läden zu haben
Besonders vor einem langen Wochenende, dann steht man ohne Ersatz da weil lt. Murphy gerade das eine Teil kaputt geht weches man selbst nicht mehr auf Lager hat :-)
Und Platzprobleme habe ich ja (noch) keine.
Soll ja auch eine Art Experimentierplatte für's gröbere werden,
da sind die NPN's absolut robuster als ein TTL oder CMOS (obwohl ich mit denen eigentich auch noch NIE Probleme hatte).
Später kommt's dann evt. in ein Projekt mit rein, dann kann ich und Ihr natürlich kompakter bauen.
Außerdem ist doch eine nette Packungsdichte (die TO92 Variante meine ich) oder nicht?
und von den paar Pfennigen, tschuldigung ich meinte Cent's geht man auch nicht in Konkurs.
PS: Holzhacken ist darum so beliebt, weil man sofort das Ergebniss seiner Arbeit sieht (A. Einstein).
darwin.nuernberg
02.05.2007, 19:25
Mist Doppelt gemoppelt, habe diesen (doppelten Beitrag mal keiner gemacht) löschen geht ja nicht mehr.
Außerdem ist doch eine nette Packungsdichte (die TO92 Variante meine ich) oder nicht?
Jupps - nettes ausführliches Statement - danke!
Wollte es nur mal wissen, gebe Dir aber Recht. Schlimmer wäre eine Serie von 1000 Stück 8-[ Die Entwürfe im anderen Thread sehen gut aus!
Viele Grüße,
Bruno
PS: LS07 für "billich" gibts bei Segor für Private oder bei Schukat für alle Anderen.
Nachtrag: den 07 gibts auch bei Reichelt - bitte nach "LS07" suchen - 36 Cent - hab gerade mal nachgeguckt.
darwin.nuernberg
02.05.2007, 20:40
Ja aber nich in SMD (hatte vergessen das anzumerken) wenn schon denn schon
(dann aber der Regler und der üble Rest auch noch in SMD, das ist dann ja wohl Pflicht!)
OK wieder ein neuer Anbieter, da wird die Brühe bald teurer als die Klöße (Versandkosten). :-b
Könnte ich auch bei DigiKey aus USA bestellen (74LS07 SO14 (http://catalog.digikey.com/scripts/partsearch.dll?Detail?name=296-14877-1-ND)), da muss ich wohl oder über sowiso was bestellen.
oder weist du wo man einen der folgeden FET's sonst nach in bezahlbaren Mengen bekommt?
Siliconix - SI 7501 DN
Fairchild Semi - FDS 8960
Fairchild Semi - FDS 8958 A
Siliconix - SI 4539 ADY
oder weist du wo man einen der folgeden FET's sonst nach in bezahlbaren Mengen bekommt?
Zumindest die letzten 3 FETs gibt es bei Farnell.
Viele Grüße,
Bruno
darwin.nuernberg
04.05.2007, 14:23
Hey Danke für den Tipp:
Zumindest die letzten 3 FETs gibt es bei Farnell.
:D
da gibt's ja wirklich (fast) alles und auch noch die FET's welche ich beim DigiKey nicht bekommen hätte aber mehr Strom abkönnen.
Hat ein besseres Sortiment als Reichelt, leider hat der aber dann doch nicht alles so das Reichelt noch seine Daseinsberechtigung hat, aber Farnell wird woh mein neuer Hauptlieferant werden.
Du hast mich gerettet.
PS:
Ich hatte schon den Hörer in der Hand und wollte bei DigiKey anrufen, zum Glück haben die nach 18:00 Uhr keine Bestellannahme mehr. Jetzt habe ich bei Farnell (im Kaufrausch) bestellt.
EDIT:
Nachtrag
Farnell beliefert keine Endkunden/Consumer, sondern nur angemeldete Gewerbe,
allerdings egal welches (Kann auch ein Metzger oder Fliesenleger sein :-$ )
und Studenten mit Nachweis, was sicherlich auf einige hier im Forum zutrifft.
kolisson
04.05.2007, 22:52
da ich das thema ja mal losgetreten habe und immer noch verfolge möchte ich kurz mal meine erfahrungen mit den sd-karten und dem interface beitragen:
es geht ja hier um die pegelwandlung, weil der micro mit 5 volt läuft und die sd-karte nur 3,xxx volt.
bevor ich die hardware gebastelt habe, hatte ich natürlich viel im web und den foren nachgelesen, wie es denn am besten gehen würde. oft sah ich eine variante mit simplen spannungsteilern aus widerständen (als pegelwandler für die datenleitungen).
hier wurden 1k8 und 3k3 widerstände als spannungsteile verwendet. in der aktuellen schaltung vom ct-bot ist das übrigens auch so.
ich hab mir dann überlegt, man könne das besser machen... mit richtigen pegelwandlern ! oder mit transistoren oder zener-dioden.
ich sag euch.... nix hat funktioniert. ... ausser die spannungsteiler.
die funzen super. und hat man gerade die krummen werte nicht zur hand (1k8 und 3k3) nimmt man je datenleitung 5 stück widerstände a 1kohm.
2 stück für den oberen zweig und 3 stück unten.
funzt einfach excellent.
gruss
ich hab mir dann überlegt, man könne das besser machen... mit richtigen pegelwandlern ! oder mit transistoren oder zener-dioden. ich sag euch.... nix hat funktioniert. ... ausser die spannungsteiler.
Moin,
hmmm - doch nicht alles gelesen?
Mein LS07 funktioniert auch perfekt und Darwins Transistorlösung wird sicher auch arbeiten. Tut mir ja Leid, dass Du nur mit den Spannungsteilern Erfolg hattest, aber diese Geschichte als einzig wahre Lösung hinzustellen, ist auch nicht Sinn der Sache. Die Hersteller müssen sparen, denn Geiz ist geil. Wenn Du große Serien auflegen musst, ist halt ein Spannungsteiler kostengünstiger als andere Lösungen, die dem Begriff "Pegelwandlung" eher entsprechen.
Schönes Wochenende,
Bruno
robby-fant
05.05.2007, 17:19
....denn Geiz ist geil.....
ich habe es auch versucht mit verschiedenen bauausführungen.
die spannung war nie genau kontant bei 3,3volt (wärme hat einfluss usw.), dies hatte auswirkungen auf die funktion der karte mal ging sie mal ging sie wieder nicht. da ich progger bin und kein platinenätzer/löter habe ich herumgeschaut wer mir die mmc-kartenhalter mit einspeisung bis 9volt anfertigen kann und es klappte. kann die mmc-kartenplatine jetzt an jeder meiner roboterplatinen benutzen bzw im wechsel anschliessen, keine probleme mehr.
fazit : man kann nicht alles machen, es gibt techniker die können es besser.
wenn ich ein modellauto zusammenbastele, baue ich den motor auch nicht selber....päng...
den schaltplan und die funktionsweise sollte man natürlich beherrschen, ist bei der fehlersuche eine erleichterung.
mfg
herrpool
11.05.2007, 14:51
moin moin,
hi josef,
ich hab mal dein beispiel programm getestet, aber irgendwie will es nicht funktionieren.
-ich benutze einen mega 32 mit 16mhz getaktet
-habe die Pegelwandlung mit den 1,8k und 3,3k aus spannungsteiler aufgebaut
-richtig verdrahtet ist alles
-versorgungspannung von 3,3V bekommt die sd karte über nen spannungsstabi
-in der confic_mmc.bas habe ich die ports auf meine umgeändert, und Cmmc_soft = 1 gesetzt
ich habe eine 128mb panasonic sd karte, 2 verschiedene 256mb, 2 verschiedene 1gb sd karten getestet, aber ich bekommen immer nur initialisierung fehltgeschlagen ausgegeben.
wo sollen die kondensatoren hin von denn mal gesprochen wurde? an die versorgungspannung der sdkarte?
was mache ich falsch?
gruß flo
robby-fant
11.05.2007, 17:55
es liegt zu 99% an der spannungsversorgung (3,3v) und die ohmsche pegelwandlung. die mmc-karten sind dahingehend sehr empfindlich.
von 10 widerständen die ich hatte, erfüllte gerade mal einer die toleranz und beim einlöten war die schon wieder anders und hab es dann in die ecke geschmissen und habe es in auftrag gegeben.
habe von einen fachman ein mmc-halter ätzen/löten lassen mit bis zu 9volt eingangsspannungsanschluss und kann die mmc an beliebige boards anschliessen. tolle sache, alle karten gehen mit bascom und ich kann mich jetzt auf das proggen konzentrieren.
herrpool
12.05.2007, 00:11
könntest du mir die schaltung zeigen, die du dir jetzt löten lassen hast? oder auch sachen wo du es machen lassen hast und was es gekostet hat?
viele dank
kolisson
12.05.2007, 03:05
hallo,
da melde auch ich mich mal wieder. ich hatte ja geschrieben, dass die sache mit den spannungsteilern sehr gut funktionierte. der bruno pisarec hat mich ja dann zurecht gewiesen !
aber ... nun sieht es so aus:
habe also noch die konstellation mit den spannungsteilern und nem spannungsregler für + uB
zusätzlich habe ich mir die vollversion von bascom geleistet, damit das voegele fat komplett in die cpu passt.
dann habe ich alles mit meiner 128mb sd-karte ausprobiert und es lief prima.. also war ich happy.
anschliessend wollte ich nun die alten 16mb karten (eine sd und eine mmc) testen und musste erschreckt feststellen, dass diese nicht funktionieren.
insofern bin ich nun bezüglich der spannungsteiler auch verunsichert.
nun habe ich den plan, zunächst mal die teiler und den spannungsregler wieder auszubauen, den cardslot direkt an die cpu zu klemmen und diese dann auf 3,2 volt zu betreiben.
wenn dann alle karten funzen, liegt es wohl am spannungsteile, wenn nicht, ist etwas anderes für das problem verantwortlich.
ich melde, wenns was neues gibt
gruss
darwin.nuernberg
12.05.2007, 08:43
Na also was soll denn das?
Wenn Deine eine Karte hardwaremässig 100% funktioniert,
dann sollte diese mit anderen Karten klappern.
Ich denke du hast dann ein Programm-Problem...
Allerdings ist deine Taktik, direkt an einer 3,2V CPU zu testen nicht verkehrt.
Wenn die CPU und die eine Karte funzt, aber deine andere Karte nicht,
dann hast Du wirklich ein Hardware Problem.
PS: wo bekommt man noch so kleine Karten her?
Verwendest Du SD-MMC Karten oder SD-Flash karten?
kolisson
12.05.2007, 12:24
die kleinen karten sind immer dabei, wenn man ne digicam kauft. da die zum fotografieren viel zu klein sind, sollten sie beim atmel ne gute verwendung finden.
etwas verwirrend ist die frage:
Verwendest Du SD-MMC Karten oder SD-Flash karten?
ich kenne nur mmc (7 kontakte)
und sd (9 kontakte).
flash sind sie doch alle oder ?
gruss
ich hatte ja geschrieben, dass die sache mit den spannungsteilern sehr gut funktionierte. der bruno pisarec hat mich ja dann zurecht gewiesen !
Hey - erzähl doch hier keinen Quatsch bitte O:)
Ich wollte nur vermeiden, dass alle, die damit anfangen, Deine Spannungsteiler als non-plus-ultra ansehen, nur weil Du der Meinung warst ..
Du bist ein freier Mensch und kannst machen was Du willst - Ok?
Viele Grüße und ein schönes Wochenende,
Bruno
darwin.nuernberg
12.05.2007, 21:26
ich kenne nur mmc (7 kontakte)
und sd (9 kontakte).
flash sind sie doch alle oder ?
gruss
So jetzt hab ich mich verheddert, sorry.
Ich meinte:
CF-Card (CompactFlash)
http://www.reichelt.de/bilder//web/pc-technik/E410/CF-CARD.jpg
und SD-MMC
http://www.reichelt.de/bilder//web/pc-technik/E410/SDSDB.jpg
Alles geklärt?
PS:
'ne MMC mit 7-Kontakten???
Bei einer MMC fehlen die Kontakte 8 und 9.
Gruß
Rolf
kolisson
13.05.2007, 11:46
also .. zur allgemeinen info:
mein problem war ja das mit nem spannungsteiler manche karte funktionierte.. andere nicht.
1. sd 128mb funktioniert
2. 16mb sd funzt nicht
3. 16mb mmc funzt nicht
zur einkreisung des fehlers habe ich nun sämtlich spannungsregler und teiler entfernt und den kartenslot direkt an die hardware-spi des 644 geklemmt. die cpu habe ich dann statt auf 5 volt mit 3,3volt laufen lassen.
ergebnis:
das gleiche wie vorher->
1. sd 128mb funktioniert
2. 16mb sd funzt nicht
3. 16mb mmc funzt nicht
da es nun nicht mehr an der pegelanpassung liegen konnte habe ich mir die karten mit winhex mal genauer angesehen. hier offenbarte sich ein weiterer fallstrick, der für das nichtfunktionieren der 16mb-karten verantwortlich ist.
die beider 16er karten sind nämlich mit fat12 formatiert. dieses wird jedoch von avr-dos respektive voegele fat nicht unterstützt. (hier geht nur fat16 oder ich glaube auch fat32)
dummerweise kann ich das nicht umformatieren, da ich pc-seitig über die laufwerksverwaltung oder patrtitionmagic keinen zugriff auf die karten bekomme. im panasonic-formatter kann es auch nicht wählen, was man gerne hätte. (ist evt. ne eigenart meines - pc cardreaders .. das ist ein im laptop eingebautes teil)
also werde ich wohl die 16er karten doch nicht für den atmel verwenden können. schade.
gruss
darwin.nuernberg
13.05.2007, 12:02
Also doch ein Progrmm / Format Problem.
Du kannst das Format nicht lesen.
Neu formatieren nicht möglich?
Probier's doch mal einen (USB) Card-Reader am PC und dann mit Windows zu formatieren:
https://www.roboternetz.de/phpBB2/album_pic.php?pic_id=1502
Die Auswahl unter Dateisystem muss natürlich von FAT32 auf FAT (=FAT16) umgestellt werden.
Natürlich vorher die Daten auf der Karte wegsichern, da diese beim löschen verloren gehen.
Wenn das auch nicht klappt:
probier das SD-Formatter Tool (http://panasonic.jp/support/global/cs/sd/download/sd_formatter.html) <- Link
kolisson
13.05.2007, 12:59
das sd formatter tool habe ich ja hier. da kann ich aber nix einstellen, was für ein fat ich haben will.
einen usb cardslot hab ich auch nicht. also warte ich mal ab, bis mir mal demnächst son externes laufwerk über den weg läuft.
bin gerade dabei mal wieder einen pegelwandler einzubauen, da das mit den 3,3 volt gesamt-ub auch nicht die endlösung ist. brauche die 5 volt für das display.
nun habe ich in meiner teilesammlung von 1980 (oder so) noch einen hef4050 gefunden. der sollte laut datenblatt gut geeignet sein.
gruss
darwin.nuernberg
13.05.2007, 13:08
das sd formatter tool habe ich ja hier. da kann ich aber nix einstellen, was für ein fat ich haben will.
einen usb cardslot hab ich auch nicht. also warte ich mal ab, bis mir mal demnächst son externes laufwerk über den weg läuft.
gruss
Na das ist wohl nich so tragisch:
beim Media-Markt (HAMA)
und beim Reichelt (X4STOR CRW-U-1S) gibts für so etwa 5.-- € so einen USB-MMC-Stick (den hab ich gerade mit dem SD-Tool getestet)
http://www.reichelt.de/bilder//web/pc-technik/E410/USB2_CARDDRIVE.jpg
Sehr praktisch da auch als USB-Stick zu verwenden
Aber den Umweg, das Teil mit dem PC neu zu formatieren musst Du wohl gehen müssen.
Wenn dann erst mal eine FAT drauf ist kannst Du dann mit Windows auf FAT32 umformatieren (gerade getestet).
robbifan
13.05.2007, 14:07
....also werde ich wohl die 16er karten doch nicht für den atmel verwenden können......
das solltest du beachten :
Bei der Formatierung der Speicherkarte sollte man darauf achten, dass sie auch wirklich mit FAT16 formatiert wird. Zum Beispiel formatiert Windows Karten mit weniger Speicherkapazität als 32 Megabyte automatisch mit FAT12. Das kann man umgehen, indem man die Karte über die Eingabeaufforderung formatiert, z. B. so:
format G: /FS:FAT /V:MMC /Q /X /A:512 (für eine 32mb-Karte)
format G: /FS:FAT /V:MMC /Q /X /A:8192 (für eine 512mb-Karte)
format G: /FS:FAT /V:MMC /Q /X (ab 512mb-Karte)
für 16mb also /A:256
ist falsch, setze /A:512 bei 16mb
mit den freeware-hexeditor hxd kannste dann schauen ob am anfang der karte fat12 fat16 oder fat32 ist.
kolisson
13.05.2007, 15:06
hallo,
der tip von robbifan (mit dem formatieren) ist ja auf jedenfall elementar. danke dafür !
ich hab nun die 16mb karte von fat12 auf fat 16 umformatiert. allerdings mit a:512 (a:256 gibt es nicht)
leider nützt es für mein voegele fat nichts. es gibt die fehlermeldung 20, die da bedeuten soll, die sektorengrösse wäre nicht korrekt. das stimmt jedoch nicht, da 512 byte ne gute grösse ist.
aber was solls, ich werd mir einfach noch ne andere sd kaufen.
den pegelwandler hab ich nun mit dem HEF/CD 4050B eingebaut. das funktioniert perfekt. die moderne version davon heisst wohl jetzt 74hc4050.
also dann.. viel spass noch
gruss
darwin.nuernberg
13.05.2007, 20:09
den pegelwandler hab ich nun mit dem HEF/CD 4050B eingebaut. das funktioniert perfekt. die moderne version davon heisst wohl jetzt 74hc4050.
Könntest Du den Schaltplan posten?
kolisson
14.05.2007, 12:48
anbei kommt der schaltplan meines pegelwandlers. aus vorsicht weise ich mal darauf hin, dass ich nicht weiss, ob diese version besser oder schlechter ist, als die ganzen bereits vorgestellten. ich hab das mit dem 4050 gebaut, weil ich den gerade vorrätig hatte. und es funktioniert perfekt.
herrpool
14.05.2007, 16:09
moment moment!!!! welche pinbelegung ist nun richtig?? also hier: http://www.ulrichradig.de/home/index.php/avr/mmc-sd und sind vcc und gnd vertauscht!!!
kolisson
14.05.2007, 16:43
oh jee--- was fürn misst. da waren plus und minus von der karte vertauscht. (in meiner zeichnung ..) habe das attachment sofort gelöscht und stelle es hier nun nochmal aus.
danke an herrpool, der es sofort gemerkt hat.
gruss
herrpool
14.05.2007, 16:44
hehe ja schade, wenn es nur daran gelägen hätte ... dann würde meine schaltung jetzt vielleicht laufen :)
kolisson
14.05.2007, 16:49
wie meinste das jetzt ?
herrpool
14.05.2007, 16:51
meine schaltung läuft noch nicht und ich weiß nicht wo dran es liegt
kolisson
14.05.2007, 17:03
das ist schade, aber du hast ja den artikel hier verfolgt und weiss, dass es an der art der karte und auch der formatierung (wenn man auf fat aus ist) liegen kann.
ich poste mal einen basic-code, den ich mal im web gefunden habe. in diesem programm wird alles zufuss gemacht. (nicht fat basiert).
zum grundsätzlichen prüfen deines interface ist das vielleicht einfacher.
musste halt noch ein wenig konfigurieren.
gruss
herrpool
14.05.2007, 17:18
aahhh wie geil!!! der durchbruch!!!! es läuft ... also stimmt doch was mit meiner formatierung nicht!!! danke schön :)
kolisson
14.05.2007, 17:22
na super. freut mich !
welche variation des wandlers haste jetzt im einsatz ?
herrpool
14.05.2007, 20:58
ich hab nen 3,3V spannungsstabi, und direkt an der sdkarte einen 22pf und einen220uf kondensator (keine ahnung ob der noch nötig war) und als wandler habe ich drei spannungsteiler aufgebaut. die gemessene spannung beträgt 3,25V bei allen.
vielen dank kolisson!!! ohne deinen testcode wäre ich bald am verzweifeln
Bluesmash
17.05.2007, 01:38
ICH BIN BEGEISTERT!!!
ich verfolge nun diesen tread von anfang an, da ich auch schon lange mal sd-karten zum datenloggen verwenden will... heute abend hatte ich nun endlich mal zeit das ganze auszuprobieren. und es hat fast von anfang an geklappt.
mein testaufbau:
RN-Control mit externem steckbrett, als kartenhalter habe ich so eine 2 reihige stekerleiste verwendet (hatte am anfang kontaktprobleme damit)
für die pegelwandlung die einfache spannungsteiler version von ulrich
und für die spannungsversorgung 2 dioden in reihe, bei mir läufts ohne extra kondensator an der karte, wahrscheinlich ist das rn-board schon stabil genug...
nachdem die karte funktionierte, habe ich auch gleich mal das avr_dos angeschaut und mit ein paar änderungen läuft es auch auf dem mega32, konnte auf jedenfall schon ein paar dateien erstellen und diese dann am pc angucken :) (also nicht der interpreter, einfach nur das dos-system)
ich bin gerade auf dem höhepunkt des tages :) ist einfach genial was mit bascom alles machbar ist!!!!
gruss bluesmash
herrpool
17.05.2007, 09:45
hey sehr gut!!!! das avr_dos würd ich auch gern mal zum laufen bekommen. was hast du für veränderungen gemacht? nur die pins oder noch tiefgreifende?
Bluesmash
17.05.2007, 11:43
also für den mega32 habe ich folgendes geändert....
hast du die neueste bascom version mit dem avr_dos ordner in den samples?
in config_avr_dos habe ich folgendes geändert damit es nicht soviel sram speicher braucht:
' Count of file-handles, each file-handle needs 524 Bytes of SRAM
Const Cfilehandles = 1 ' [default = 2]
' Handling of FAT-Buffer in SRAM:
' 0 = FAT- and DIR-Buffer is handled in one SRAM buffer with 561 bytes
' 1 = FAT- and DIR-Buffer is handled in separate SRAM buffers with 1078 bytes
' Parameter 1 increased speed of file-handling
Const Csepfathandle = 0 ' [default = 1]
dann die datei speichern...
in config_mmc musst du natürlich deine anschlusspins ändern und ob du hardware oder software spi nutzen willst...
datei speichern....
danach kannst du test_dos_drive öffnen und da musst du das mmc_config file einbinden damit es den richtigen karten treiber hat und die letzte zeile für den fs_interpreter auskommentieren da dies nicht auf den mega32 passt...
danach compilieren und übertragen....
dies sieht bei mir dan folgendermassen aus:
$regfile = "m32def.dat"
$crystal = 16000000
' Adjust HW Stack, Soft-Stack and Frame size to 128 minimum each!!!
$baud = 9600
'Open "Com1:" As Binary As #1 ' use #1 for fs_interpreter
Config Clock = Soft
Enable Interrupts
Config Date = Mdy , Separator = .
Dim Btemp1 As Byte
Print "Wait for Drive"
$include "Config_MMC.bas"
' Include here you driver for Compactflash/HardDisk or other
'$include "Config_CompactFlash_M128.bas" ' Does drive init too
'$Include "Config_HardDisk_M128.bas"
If Gbdriveerror = 0 Then
' Include AVR-DOS Configuration and library
$include "Config_AVR-DOS.BAS"
Print "Init File System ... ";
Btemp1 = Initfilesystem(1) ' Partition 1
' use 0 for drive without Master boot record
If Btemp1 <> 0 Then
Print "Error: " ; Btemp1 ; " at Init file system"
Else
Print " OK"
Print "Filesystem: " ; Gbfilesystem
Print "FAT Start Sector: " ; Glfatfirstsector
Print "Root Start Sector: " ; Glrootfirstsector
Print "Data First Sector: " ; Gldatafirstsector
Print "Max. Cluster Nummber: " ; Glmaxclusternumber
Print "Sectors per Cluster: " ; Gbsectorspercluster
Print "Root Entries: " ; Gwrootentries
Print "Sectors per FAT: " ; Glsectorsperfat
Print "Number of FATs: " ; Gbnumberoffats
Print "Disksize : " ; Disksize() ' show disk size in bytes
'Print "Disk free: " ; Diskfree()
Print "File Len: " ; Filelen( "TEST2.TXT") ' show free space too
End If
Else
Print "Error during Drive Init: " ; Gbdriveerror
End If
'File erstellen und etwas reinschreiben
'dim some test variables
Dim S As String * 60 , Fl As String * 12 , Ff As Byte
Dim X As Byte
Dim I As Word
Dim Sdatetime As String * 18
Fl = "test.txt"
S = "test this"
'Now we are getting to it
'We can specify a file handle with #1 or #2 etc. or we can ask for a free
' file handle with the FreeFile function. It will return a free handle if there is one.
Ff = Freefile() ' get a file handle
'With this file handle we refer to a file
Open Fl For Output As #ff ' open fikle for output
' we need to open a file before we can use the file commands
' we open it for OUTPUT, INPUT , APPEND or BINARY
' In this case we open it for OUTPUT because we want to write to the file.
' If the file existed, the file would be overwritten.
Print #ff , S ' print some data
Print #ff , S
Print #ff , S
Print #ff , "A constant" ; S
'Testsb Ff
Close #ff
Print "fertig"
End
' If you want to test with File-System Interpreter uncomment next line
'$include "FS_Interpreter.bas"
gruss bluesmash
darwin.nuernberg
18.05.2007, 10:36
Ich habe mal ein Interface (5V/3,3V) entworfen,
sobald ich die Bauteile habe und das Layout an den SD-Connector angepasst wurde, sowie die Schaltung verfiziert ist,
werde ich die Platine hier veröffentlichen....
https://www.roboternetz.de/phpBB2/album_pic.php?pic_id=1525
Hier noch in etwas anderer Perspektive und grösser (https://www.roboternetz.de/phpBB2/album_pic.php?pic_id=1524)
herrpool
18.05.2007, 11:10
vielen dank bluesmash!!
hab das gerade mal auspropiert, bekomme die karte aber noch nicht initialisiert. hab das über soft spi gemacht. ich denke da könnte das problem liegen. warum wird in der config_MMC für den softspi eigentlich nicht diese zeile verwendet?
Config Spi = Soft , Din = Pinb.0 , Dout = Portb.1 , Ss = Portb.3 , Clock = Portb.2
noch eine frage: wie macht ihr das wenn ihr den hardspi nutzt? nehmt ihr die sd-karte immer ab beim programmieren?
gruß herrpool
herrpool
18.05.2007, 13:15
jehahaaaaa!!!
es funktioniert!! lag wirklich an dem softspi, habs jetzt an den hardspi angeschlossen und es läuft :)
bleibt noch die frage wie man es hinbekommt dass man nicht immer alles vom hardspi abziehen muss wenn man den controller programmieren will
Bluesmash
18.05.2007, 13:37
sitze gerade in der schule und langweile mich...
ich betreibe die karte an der soft spi... und es funktioniert tadellos....
gruss bluesmash
kolisson
18.05.2007, 13:55
bleibt noch die frage wie man es hinbekommt dass man nicht immer alles vom hardspi abziehen muss wenn man den controller programmieren will
also ich ziehe da garnix ab. funzt auch so. die sd karte bekommt ja über das ss-signal nen chip-select.
gruss
robbifan
18.05.2007, 14:26
es funktioniert!! lag wirklich an dem softspi, habs jetzt an den hardspi angeschlossen und es läuf
wenn es nur damit läuft, hast du noch einen kardinalfehler in deinem system.
es müssten beide versionen laufen, wenn deine hardware stimmt und deine software.
Bluesmash
18.05.2007, 17:38
@herrpool: was mich noch intressieren würde: was verwendest du für einen mikroprozessor?
wer hat schon erfahrungen mit dem avr_dos? ich hatte zwischendurch probleme dass ich die karte am pc nicht mehr lesen konnte, dies war zwar während dem ausprobieren wo ich immer wieder was geändert habe... hatte sonst noch jemand probleme?
und noch was:
die speicherkarten sind ja begrenz in der anzahl der schreibzugriffe oder? es gibt ja den flush befehl, kann ich die karte damit auch zerstören wenn ich den zu oft gebrauche? dieser befehl macht doch auch ein schreibzugriff, oder?
da ja die sd kartenhalter relativ schwer zu beschaffen sind, hab ich mir überlegt mit mikro sd-karten zu arbeiten und die adapterkarte auf normal-sd auf das board zu löten und als kartenhalter zu verwenden...
oder kennt jemand ne günstige quelle für sd-karten halter?
gruss bluesmash
kolisson
18.05.2007, 17:49
ich hab nen sockel von conrad:
1 stck. kontaktiereinrichtung 4in1 Artikel-Nr.: 731133
plusminus
18.05.2007, 18:05
und noch was:
die speicherkarten sind ja begrenz in der anzahl der schreibzugriffe oder? es gibt ja den flush befehl, kann ich die karte damit auch zerstören wenn ich den zu oft gebrauche? dieser befehl macht doch auch ein schreibzugriff, oder?
In der Tat ist nach grob ein paar hunderttausend Schreibzyklen Schluss.
Ja ein flush()-Aufruf schreibt die Daten im allgemeinen aus einem Puffer auf die Karte/Platte/etc...
Zur Info: Gepuffertes schreiben ist schonender für das Speichermedium und vor allem viel schneller, als jedesmal für ein oder zwei Byte den Lesekopf der Festplatte zu bewegen, bzw einen kompletten Block im Flash-Speicher zu überschreiben.
/mfg plusminus
herrpool
18.05.2007, 19:30
also ich hab mir den 2546765 in 1 kartenleser von hama für 5euro bei reichelt gekauft und einfach den sd-connector ausgelötet. einzelnt wollen die für den connector knapp 10 euro haben .... verrückt :)
ich hab auch nen mega32, bin aber gerade dabei mir nen adapter für nen mega128 zubasteln
weiß jemand zufällig wie ich anstatt dem blank nen tab einfüge?
Print #ff , "X-Achse" ; " " ; "Y-Achse"
habs mit chr(9) versucht aber da macht er garnichts
gruß herrpool
Hallo !
Ich experimentier auch schon lange mit MMC rum aber ich bekomm das mit dem FAT nicht hin.(*,)
ATMEGA32 Pins -> MMC-Card:
Portb.4 SS -> CS
Portb.6 MISO -> DO
Portb.5 MOSI -> DI
Portb.7 SCK -> SCLK
Das Testprogramm ohne FAT funktioniert allerdings mit dieser Konfig.
Kann mal jemand nachsehen was ich eventl falsch mache ?
Ich füge meinen Orner mal als Anhang ein.
Danke schon vielmals!
MaXX ]
wassermann
12.07.2007, 16:52
sorry für die Aufwärmerei.
@tc-maxx
Hab grad mal Hard SPI probiert und funktioniert.
Karte: SD 1GB FAT32 (Anpassung der beiden $include files!)
@Bluesmash
Ich hab den Slot bei RS bestellt (Art.-# 502-5004). Kostet in D 1,85 Euronen. Versandgebühr/Mindestbestellwert hab ich jetzt nicht gecheckt, da dies bei mir (Onlinebestellung Asien) wegfiel.
Hast du immer noch Probleme mit dem Lesen?
Bzgl. 5V/3,3V:
Der Mega32 ist ein 16PU (eigentlich 4.5 .. 5.5V), läuft bei mir aber mit 3,3V. Flashen per USB-ISP.
LCD und MAX232 laufen mit Ub=5V, die Datenleitungen dagegen speise ich aus dem Mega32 direkt.
gruss,
wassermann
Grüße,
Ich hab das ganze WE getestet und dabei ne SD zerschossen, aber es geht immer noch nicht.
wenn ich als HW-Spi kompiliere dann kommt nur eine Fehlermeldung
und die Ausgabe über RS232 geht ganz schnell.. Wait for Drive...Wait for Drive......
Das HEX wird aber troozdem erstellt
Wenn ich als Soft-Spi kompiliere dann kommen mehrere Fehlermeldungen (siehe Anhang) und über RS232 kommt nur einmal Wait for Drive......
was mach ich falsch ?
Danke
MaXX
PS: könnte eventl. mal jemand einen funktionierenden Source für den ATMEGA32 uppen ?
hallo!
mal ne andere frage:
kann ich eine mmc/sd am atmega hardware spi anschliessen (nur zum auslesen) und GLEICHZEITIG auch am hardware spi einen funkempfänger? beides läuft wohl besser/einfacher über hardware spi. wenn ja, wie müsste es in der schaltung aussehen?
ist es überhauptmöglich mit bascom die mmc/sd auszulesen und funksignale auszuwerten?
wenn nein, welche andere möglichkeit habe ich? gibt es einen atmega mit 2x spi? geht software und hardware spi gleichzeitig?
vielen dank schonmal! - der noob
[-o<
darwin.nuernberg
16.07.2007, 22:38
Ich denke mal ja.
Jedenfalls steht es so in der ursprünglichen Beschreibung:
Zitat:
MMC/SD-Treiber:
Der Treiber für MMC/SD Karten wurde verbessert. Der neue Treiber hat nun ein besseres
Error-Handling. Der Anschluss der Karte ist nun nicht mehr auf die HW-SPI Pins beschränkt.
Falls der HW-SPI der CPU bereits mit einer anderen SPI-Einheit mit einem anderen Mode
belegt ist, kann auf anderen Pins ein Soft-SPI gefahren werden. Der Soft-SPI ist im Treiber
integriert. HW oder Soft-SPI, sowie die verwendeteten Pins können in der Datei
Config_MMC.BAS konfiguriert werden.
Quelle: http://members.aon.at/voegel/index.html
bzw. http://members.aon.at/voegel/Downloads/Update-Info_de.pdf
Allerdings hab ich weder das eine noch das andere am laufen,
müsste da ein paar Widerstände tauschen und hab (momentan) gaaaar keine Lust drauf...
EDIT:
Knallhart am Thema vorbei, sorry hab nicht sorgfältig gelesen.
SPI ist ein BUS, und kann mit anderen Geräten zusammen betrieben werden. Du must nur die Select-Leitung (CS bei der SD-Karte) richtig ansprechen und ggf. die andere für die Zeit des Zugriffes disablen.
Oder eben wie bereits erwähnt, du verwendest den Software-SPI.
Direkt gleichzeitig geht nicht, da 1. der AVR nicht Multitasking fähig ist und 2. der Bus das schon garnicht zulässt. Also immer eins nach dem anderen. Mal dies und dann das.
danke für die diese sorgfältig geschriebene antwort! :D ich werde mal hw und sw spi ausprobieren. jedoch zunächst erstmal bestellung und dann platinenlayout ;)
Millenniumpilot
20.07.2007, 17:28
Hallo Ihr,
wollte nur mitteilen, daß ich hier als "Stiller Mitleser" teilnehme ;-)
Damit wollte ich nur sagen, daß sich doch noch mehr User für dieses Problem interessieren.
@Darwin: hast Du Deine "rn-mmc" eigendlich schon fertig?
Gruß Dirk
darwin.nuernberg
20.07.2007, 23:40
Fertig ja,
funktion Nein.
Habe die falschen Widerstände drin, also schalten die Transen nicht.
Momentan auch keine lust drauf die zu tauschen.
roboterheld
29.07.2007, 17:34
auch ne einstellung....
roboterheld
29.07.2007, 17:35
Ich experimentier auch schon lange mit MMC rum aber ich bekomm das mit dem FAT nicht hin..
mach doch dein eigenes system für die daten, ist nicht schwer.
Hallo Leute
Schon lange wollte ich einen SD/MMC karte an microcontroller mit SoftSPI benutzen, dar ich schon einen Lcd an Hardware SPI angeschlossen habe, aber bis jetzt noch nicht damit klar gekommen.
Kann jemand einen funktionsfähigen code posten woran ich und andere lernen können wie Daten auf der karte geschrieben und gelesen werden können.
Ich glaube das wäre für einige von uns sehr hilfreich
Danke
Gruss
Sato
Gantenbein
11.09.2007, 13:57
Hallo,
ich bin gerade auch dabei zu versuchen Daten auf eine MMC Karte zu schreiben. Ich habe das Board von Display 3000 mit einem AtMega128 das ich über einen USB-ISP Programmer mit spannung verwende. Dazu kommt dann nochmals eine externe Spannungsversorgung für die MMC Karte damit diese die stabilisierten 3,3 Volt erhält.
Ich schlage mich jedoch zur Zeit mit dem Error 17 "Sector 0 on Card is not a Master Boot Record" herum. Als ich versuchte die Karte mit FAT32 zu formatieren wollte das Windows allerdings nicht und so mußte ich es mit FAT machen -was aber doch bei einer 32MB Karte schon FAT16 sein müßte oder? Kann dieser Fehler daher kommen? Was ich vielleicht auch noch machen könnte wäre die beiden Massen verbinden aber das dürfte ja nichts mit diesem MBR zu tun haben. Ah im Programm verwende ich übrigens den Befehl initfilesystem(1) -trägt man statt der 0 eine 1 ein hätte das auch für einen fehler sorgen können. Hat jemand noch eine Idee woran es liegen könnte? Außer den meinen.
darwin.nuernberg
11.09.2007, 23:08
Wenn nichts meht geht,
probier mal das sdformatter-tool
http://www.pctipp.ch/praxishilfe/kummerkasten/sonstiges/34129/2gb_sd_karten_formatieren.html
Gantenbein
13.09.2007, 15:15
Super das hat etwas gebracht eine meiner 4!! Karten funktioniert nun damit
Woher kommt das denn, ist der Windows Formatter nicht ordentlich genug oder formatiert er erst über 32MB die Karte mit FAT16 ?
-Rein aus Interesse gefragt.
roboterheld
15.09.2007, 22:18
das dos-fat-system (demoprogramm von bascom) von der speicherkarte läuft nicht nur auf dem atmega128, sondern ich habe einfach den atmega32 raus und den atmega644 rein , sind pincompatibel und es läuft. der grund ist, das der atmega644 genauso viel sram hat wie der atmega128. ansonsten läuft es nicht auf den kleinen atmegas.
kolisson
15.09.2007, 23:30
genau so ist es.....
wenn man nur den zugriff auf die speicherkarten haben will, (also ohne dos-filesystem) geht das auch mit nem mega32. für das komplette dos fat.. benötigt man dann bei dein dip-40 gehäusen schon einen 644er und ne vernünftige version von bascom.
ich meine damit ne gekaufte originalversion.
gruss
roboterheld
16.09.2007, 09:58
.....ich meine damit ne gekaufte originalversion......
du kommst mit dem 4kb bei der free-version von bascom nicht hin.
kolisson
10.10.2007, 03:44
hallo ihr...
lange habe ich es vor mir hergeschoben... nun angepackt ! mega 32 raus ... 644 rein (wie roboterheld es schrieb und ich es schon immer dachte) ..... und vor allem... mal ein wenig an diesen ganzen includes und lib-einbindungen gebastelt.
die beispieldateien von bascom sind ja extrem informativ (smile)
ein datenlogger zeichnet sich meines erachtens auch dadurch, dass er sagen , welche daten er wann genommen hat.
bei der einbindung einer real-time-clock (rtc) einheit (pcf8583) wollte ich zunächst den code aus den beispielen von bascom übernehmen. im beispiel von bascom sieht es so aus:
'These are pointers to tm() for simple handling.
Dim S As Byte At &H60 Overlay
Dim M As Byte At &H61 Overlay
Dim H As Byte At &H62 Overlay
Dim D As Byte At &H63 Overlay
Dim Month As Byte At &H64 Overlay
beim mega 644 muss es aber so aussehen:
''These are pointers to tm() for simple handling.
Dim S As Byte At &H100 Overlay
Dim M As Byte At &H101 Overlay
Dim H As Byte At &H102 Overlay
Dim D As Byte At &H103 Overlay
Dim Month As Byte At &H104 Overlay
[/code]
nun ... was solls... irgendwann liest man andere samples von bascom und lernt dir variablen date$ und time$ kennen. da passen die vorher gelernten sachen dann garnicht mhr rein.
mein grosser erfolg wird ein "bullet proof" datenlogger sein. ich bin nah dran.... wenn fertig... dann gibzs hier die schaltpläne und die fakten.
gebt mir noch 1 bis 2 wochen
gruss klaus
Alex20q90
11.10.2007, 16:07
Hey Jungs,
da anscheinend so viele probleme mit der Formatierung haben, und einige echte Profis sind, würde ich vorschlagen das einer eine Format-Routine für FAT schreibt. So kann die SD-Karte formatiert werden wie es der uC braucht und Windows versteht!
roboterheld
12.10.2007, 13:06
....Woher kommt das denn, ist der Windows Formatter nicht ordentlich genug oder formatiert er erst über 32MB die Karte mit FAT16 ?...
windows formatiert erst über 32MB die Karte mit FAT16!
befasse dich mal mit den formatierungsarten unter windows, man kann die mmc-karte auch zu fuss formatieren.
GrafKoks
30.05.2010, 15:22
Hallo zusammen,
ich hab diesen Thread mit Interesse gelesen und er hat mich auch soweit gebracht, dass eine Datei über den ATMega32 auf meiner SD-Karte (1GB) angelegt wird.
Mehr ist allerdings nicht drin, sprich: der speichert nix drinnen.
Ich hab den Beispiel-Quellcode aus diesem Thread verwendet und die includes entsprechend angepasst:
$regfile = "m32def.dat"
$crystal = 16000000
' Adjust HW Stack, Soft-Stack and Frame size to 128 minimum each!!!
$baud = 9600
'Open "Com1:" As Binary As #1 ' use #1 for fs_interpreter
Config Clock = Soft
Enable Interrupts
Config Date = Mdy , Separator = .
Dim Btemp1 As Byte
Wait 3
Print "Wait for Drive"
$include "Config_MMC.bas"
' Include here you driver for Compactflash/HardDisk or other
'$include "Config_CompactFlash_M128.bas" ' Does drive init too
'$Include "Config_HardDisk_M128.bas"
If Gbdriveerror = 0 Then
' Include AVR-DOS Configuration and library
$include "Config_AVR-DOS.BAS"
Print "Init File System ... ";
Btemp1 = Initfilesystem(1) ' Partition 1
' use 0 for drive without Master boot record
If Btemp1 <> 0 Then
Print "Error: " ; Btemp1 ; " at Init file system"
Else
Print " OK"
Print "Filesystem: " ; Gbfilesystem
Print "FAT Start Sector: " ; Glfatfirstsector
Print "Root Start Sector: " ; Glrootfirstsector
Print "Data First Sector: " ; Gldatafirstsector
Print "Max. Cluster Nummber: " ; Glmaxclusternumber
Print "Sectors per Cluster: " ; Gbsectorspercluster
Print "Root Entries: " ; Gwrootentries
Print "Sectors per FAT: " ; Glsectorsperfat
Print "Number of FATs: " ; Gbnumberoffats
Print "Disksize : " ; Disksize() ' show disk size in bytes
'Print "Disk free: " ; Diskfree()
Print "File Len: " ; Filelen( "TEST3.TXT") ' show free space too
End If
Else
Print "Error during Drive Init: " ; Gbdriveerror
End If
'File erstellen und etwas reinschreiben
'dim some test variables
Dim S As String * 60 , Fl As String * 12 , Ff As Byte
Dim X As Byte
Dim I As Word
Dim Sdatetime As String * 18
Fl = "test3.txt"
S = "test this"
'Now we are getting to it
'We can specify a file handle with #1 or #2 etc. or we can ask for a free
' file handle with the FreeFile function. It will return a free handle if there is one.
Ff = Freefile() ' get a file handle
'With this file handle we refer to a file
'Open Fl For Output As #ff ' open fikle for output
Open Fl For Output As #ff
' we need to open a file before we can use the file commands
' we open it for OUTPUT, INPUT , APPEND or BINARY
' In this case we open it for OUTPUT because we want to write to the file.
' If the file existed, the file would be overwritten.
Print #ff , "A constant"
'Testsb Ff
Put #ff , S
Write #ff , "Write test"
Flush #ff
Close #ff
Print "fertig"
End
' If you want to test with File-System Interpreter uncomment next line
'$include "FS_Interpreter.bas"
Den Schaltplan von der SD-Karten-Platine sowie meine include-files habe ich auch mal hochgeladen.
Wäre sehr dankbar, falls jemand eine Idee hätte, woran das liegen könnte.
So long und viele Grüße!
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.