Hallo,
ich möchte hier meinen I²C-EEPROM-Brenner vorstellen, der aus einer in
Delphi programmierten PC-Software und einen PIC16F877 oder PIC16F876 als
Hardware aufgebaut ist.
Damit können I²C-EEPROMs des Typs:
M24C01,M24C02,M24C04,M24C08,M24C16,M24C32 und M24C64 beschrieben,
ausgelesen(und als File abgespeichert) und gelöscht werden. Auch können
Hexfiles (allerdingst keine Intel-Hex-Files, vielleicht implementiere
ich das auch noch) geladen und geschrieben werden, wobei der Aufbau der
Hexfile volgendermassen aussieht:
Jedes Hexbyte wird mit einem h eingeleitet. Nach diesen h's sucht mein
Programm und speichert die zwei Nachfolgende Hexzeichen in ein Array
(vorher wird noch überprüft, ob es sich dabei auch wirklich um
Hexzeichen handelt), zusätzlich kann noch die Zieladresse ins Hexfile
geschrieben werden (kann aber nachträglich noch geändert werden) in der
Form: Hex=.... (bsp. Hex=01A0), wo das in der Hexfile steht ist relativ
egal, auch können Komentare einfach mit eingeschrieben werden. Es muss
nur darauf geachtet werden, dass nicht sowas wie bsp. habedere vorkommt,
denn sonst meint das Prog es handelt sich um den Hexwert AB.
Zum Hardwareaufbau ist eigentlich nicht viel zu sagen: Einfach einen
PIC16F877 oder PIC16F876 mit 20Mhz Quarz nehmen, einen MAX232
anbriengen, das EEPROM zusammen mit den passenden Hochziehwiderständen
(ca. 1,8k) an die Daten und Clockleitungen des I²C Interfaces
anschliessen. Die Enable-Leitungen E2,E1,E0 können jeweils an Plus oder
Masse angeschlossen werden, allerdings müssen die Zustände der
Adressleitung (E2,E1,E0) durch Setzen von Hacken im Prog unter
Geräteadresse angegeben werden.
Verbesserungvorschläge sind erwünscht, Bugs bitte mir mitteilen.
MFG Michael
Eigentlich hatte ich denn Brenner nur für mich gebaut, weil ich für mein
aktuelles Projekt (eine Wetterstation mit GLCS) einen Programmer für
EEPROMs brauchte. Deshalb hab ich momentan die Zeit nicht, einen
Programmer für sämtliche EEPROMs zu bauen, aber später werde ich
nochmals zu dem Thema zurüchkommen.
PS.: Bei mir läuft der Programmer an USB (FT232RL), die Stromverorgung
ebenfalls
Version 1.6
Changelog:
-Sprachfile mit Sprache Deutsch und Englisch vollständig (weitere können
hinzugefügt werden)
-Device.ini mit spezifischen Daten der verschiedenen I²C EEPROMs
(MC24C01 bis 64, AT24C128, AT24C256 bereits eingetragen, kann mit
beliebieg vielen I²C EEPROMs erweitert werden (max. EEPROM-Größe
32768Byte)) (>'Device.ini_ReadMe.txt' erklärt den Aufbau der Device.ini)
-Fortschrittsbalken beim Löschen hinzugefügt
Da ich in der nächsten Zeit mit meinem Wetterstationsprojekt beschäftigt
bin, wird es in nächster Zeit keine Aktualisierungen geben (außer jemand
hat einen Bug entdeckt, der wird natürlich sofort behoben), wenn ich
damit fertig bin, werd ich versuchen, weiter EEPROM-Typen (SPI,
Microwire, etc.) einzubauen.
MFG
Michael
Sorry, hab im Post davor die Hexdatei und die Device.ini-Readme.txt
vergessen,
btw. verwechselt mit dem Quellcode ;-). Hier nochmal das neuste und
komplette Packet.
Hallo,
ich hoffe das ich noch eine Antwort bekomme, da der Post dieses
Beitrages nun doch schon etwas länger her ist.
Ich habe den Brenner mit einem PIC16F877 nachgebaut, den Controller
programmiert und alles macht auf den ersten Blick einen sehr guten
Eindruck! Jedoch bekomme ich jedes Mal wenn ich versuche mit dem
Controller zu kommunizieren den Fehler:
Fehler: Zeitüberschreitung
Es ist ein Übertragungsfehler aufgetreten! Keine Antwort vom Brenner
Wenn ich mit dem Oszilloskop nachmesse kann ich das auch nachvollziehen,
da die Signale vom PC zwar bis zum Controller kommen, von dort aus
jedoch keine weitere Initiative ausgeht, weder auf dem TxD noch auf dem
SDA oder SCL.
Den Quarz habe ich nachgemessen der schwingt mit 20MHz. Habe auch schon
zwei weitere Controller probiert. Diese verhalten sich genau gleich.
Hoffe das mir jemand helfen kann!
Danke
Daniel
So wies aussieht rennt also das Programm nicht los.
Ich würde zuerst mal gucken, ob alle Löstellen in Ordnung sind, vlt
nochmal jeden Lötpunkt, der etwas "schräg" aussieht kurz mitm Lötkolben
antippen und flicken. Fehlen vlt irgendwelche Brücken?
"Grundbeschaltung" des Controllers in Ordnung (RS232 Teil,
Spannungsversorgung, Reset, ...)?
Wenn du dir damit sicher bist, dann vergleiche mal Aufbau mit Sourcecode
und/oder Schaltplan (soll ja auchmal vorkommen, dass im Code was anderes
is, als im Plan).
Also das Programm läuft an! Das sehe ich ja daran das der Quarz anfängt
zu schwingen.
Das Layout habe ich jetzt auch noch einmal kontrolliert da scheint auch
alles ok zu sein.
Eigentlich müsste der Controller nachdem er die Daten über die RS232
Schnittstelle bekommen hat ja anfangen sie auf die I²C Schnittstelle zu
übertragen. Aber das macht er nicht da ich weder am SCL noch am SDA Pin
etwas sehen kann wenn ich nachmesse.
Ich habe bei den Fuses eigentlich nichts geändert.
Kenne mich mit MPLAB auch nicht so gut aus.
Wenn die Fusebits unter Configure -> Configuration bits zu finden sind,
stellen sie sich aber beim Impotieren des Codes von alleine ein.
Hab das Ganze mal in einem pdf ausgeben lassen und mitgeschickt.