- 3D-Druck Einstieg und Tipps         
Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 34

Thema: i2c eeprom 24c65 am atmega betreiben mit bascom

  1. #11
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    54
    Beiträge
    1.258
    Anzeige

    Praxistest und DIY Projekte
    Hallo pebisoft,
    ich häng dir mal dein Programm, das du eigentlich nur aus dem Samples-Ordner kopiert hast, unten an. Ich habe allerdings ein paar Änderungen vorgenommen, um es auf meine Hardware anzupassen (Chip/Quarz/LCD/Ports). Im Prinzip bleibt es aber. Ich habe das Programm mit einem 24c16 getestet, weil ich grade keinen anderen da habe, und es funktioniert.
    Prüfe bitte deine Hardware nach. Pullups werden z.B. gerne vergessen.
    Und lies dir den letzten Absatz im Programm durch. Du willst ja mehr als 256 Byte schreiben.
    Gruß, Michael

    Code:
    $regfile = "m8def.dat"
    $crystal = 16000000
    
    Config Portd = Output
    Config Sda = Portc.4
    Config Scl = Portc.5
    'Lcd -pins Sind unter Options-Compiler-LCD eingetragen
    Initlcd
    Cls
    Lcd "EE - Test"
    Waitms 500
    
    Declare Sub Write_eeprom(byval Adres As Byte , Byval Value As Byte)
    Declare Sub Read_eeprom(byval Adres As Byte , Value As Byte)
    
    Const Addressw = 162                                        'slave write address
    Const Addressr = 163                                        'slave read address
    Dim I As Byte
    Dim B1 As Byte , Adres As Byte , Value As Byte              'dim byte
    
    
    
    'Hier werden 3 Adressen beschrieben. Zum Test, obs geklappt hat,
    'die 3 Zeilen einfach ausklammern und das Programm nochmal brennen
    Call Write_eeprom(1 , 15)
    Call Write_eeprom(2 , 75)
    Call Write_eeprom(3 , 222)
    
    
    Cls
    Locate 1 , 1
    For I = 1 To 3
    
    Call Read_eeprom(i , Value)
    
    Lcd I ; "=" ; Value ; " ";
    
    Next
    End
    
    
    'sample of writing a byte to EEPROM AT2404
    Sub Write_eeprom(byval Adres As Byte , Byval Value As Byte)
        I2cstart                                                'start condition
        I2cwbyte Addressw                                       'slave address
        I2cwbyte Adres                                          'asdress of EEPROM
        I2cwbyte Value                                          'value to write
        I2cstop                                                 'stop condition
        Waitms 10                                               'wait for 10 milliseconds
    End Sub
    
    
    'sample of reading a byte from EEPROM AT2404
    Sub Read_eeprom(byval Adres As Byte , Value As Byte)
       I2cstart                                                 'generate start
       I2cwbyte Addressw                                        'slave adsress
       I2cwbyte Adres                                           'address of EEPROM
       I2cstart                                                 'repeated start
       I2cwbyte Addressr                                        'slave address (read)
       I2crbyte Value , Nack                                    'read byte
       I2cstop                                                  'generate stop
    End Sub
    
    
    ' when you want to control a chip with a larger memory like the 24c64 it requires an additional byte
    ' to be sent (consult the datasheet):
    ' Wires from the I2C address that are not connected will default to 0 in most cases!
    
    '   I2cstart                                                'start condition
    '   I2cwbyte &B1010_0000                                    'slave address
    '   I2cwbyte H                                              'high address
    '   I2cwbyte L                                              'low address
    '   I2cwbyte Value                                          'value to write
    '   I2cstop                                                 'stop condition
    '   Waitms 10
    
    'End

  2. #12
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941

    es geht nicht mit dem eeprom 24c04

    hallo, michael es geht nicht. ich werd noch verrückt !
    ich habe den atmega16 mit 8 mhz (eingestellt) und es funktioniert nicht.
    ich kriege nach ca 1 minute im display "1=255,2=255,3=255".
    ich habe "m16def" und crysel=8000000. pinout(scl und sda) auf b0 und b1 gelegt. könntest du den test einmal mit den 24c04 oder 24c256 durchführen, ich werde dir gerne die kosten für die gekauften chips ersetzen. ich glaube , du kannst mir weiterhelfen. versuch es einmal.
    von der c-control I kann ich den chip auf dem steckbrett laden und abfragen über I2C mit der adresse 162 und 163.
    mfg pebisoft

  3. #13
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    54
    Beiträge
    1.258
    Hallo pebisoft,
    also ich hab es jetzt extra nochmal auf scl=Portb.0 und sda=Portb.1 umgesteckt und das Programm angepaßt und es funktioniert.
    Was mich allerding stutzig macht:
    ich kriege nach ca 1 minute im display "1=255,2=255,3=255".
    nach 1 Minute erst???
    Das ist aber seltsam.
    Allerdings bekomme ich bei falscher Adresseinstellung oder bei fehlendem EEprom auch 3 mal 255 angezeigt. Schau also nochmal nach der Hardware.
    Gruß, Michael

  4. #14
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941

    24c65 läuft nicht

    hallo, es läuft nicht. werde mir jetzt den 24c16 kaufen und dann noch einmal probieren. wenn ich die beiden steuerleitungen an den c-control schliesse, kann ich unter der adresse 162/163 schreiben und lesen.
    meine pinbelegung des 24c65 : a0,vcc an +5volt, a1,a2,gnd an masse
    scl, sda an die angegebenen pins. ein pin ist frei ,der wp.
    im anhang mein programm.
    mfg pebisoft
    Angehängte Dateien Angehängte Dateien

  5. #15
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    54
    Beiträge
    1.258
    Hallo pebisoft,
    ich kann mir nur noch einen Hardware-Fehler als Ursache denken.
    scl und sca an den richtigen Pins? (Beim Mega16 DIP sind das Pin5 und 6)
    Da Port B5 (Pin Nr6) gleichzeitig vom Programmierinterface benutzt wird, solltest du das vielleicht mal abklemmen. Bei einem Quick&Dirty-Interface gibt es da manchmal tolle Effekte.
    Pullups (~10k) angeschlossen?
    WP vom 24c65 könntest du auf Masse legen...poste doch einfach mal deine Schaltung.
    Gruß, Michael

    PS: Wenn der 24c65 an der C-Control funzt, geht er _garantiert_ auch mit dem AVR.

  6. #16
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941

    24c65

    hallo, du saget pullups, wo soll ich die 10 kybte beim mege16 anschliessen, oder beim 24c65.
    mfg pebisoft

  7. #17
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    54
    Beiträge
    1.258
    Hallo pebisoft,
    wo soll ich die 10 kybte beim mege16 anschliessen, oder beim 24c65
    egal wo, Hauptsache, der Bus wird auf +5V gezogen.
    Hast du das ISP-Interface zum Testen entfernt?
    Und: Kannst du nicht mal deine Schaltung posten?
    Gruß, Michael

  8. #18
    Neuer Benutzer Öfters hier
    Registriert seit
    27.05.2004
    Beiträge
    24

    Re: 24c65 läuft nicht

    Hallo,

    Zitat Zitat von pebisoft
    hallo, es läuft nicht. werde mir jetzt den 24c16 kaufen und dann noch einmal probieren. wenn ich die beiden steuerleitungen an den c-control schliesse, kann ich unter der adresse 162/163 schreiben und lesen.
    meine pinbelegung des 24c65 : a0,vcc an +5volt, a1,a2,gnd an masse
    scl, sda an die angegebenen pins. ein pin ist frei ,der wp.
    im anhang mein programm.
    mfg pebisoft
    ich hatte auch große Probleme einen 24C16 anzusprechen.
    Es hat alles ewig lange gedauert, das Schreiben und Lesen.
    Zwischen 2 Anzeigen beim Lesen vergingen rund 20 Sekunden und der gelesene Wert war immer 255.
    Geholfen hat bei mir für SLC und SDA andere Pins zu nehmen.
    Ich hatte zuerst portc.5 für SCL und portc.4 für SDA.
    (ist im Datenblatt des mega8 in der Pinbelegung so vorgegegeben, Hardware?)
    Habe dann mal portb.1 und portb.0 genommen und alle geht.
    Warum weiß ich aber nun auch nicht.
    Pin WP muß auf GND, zumindest beim 24c16, sonst ist eine Hälfte schreibgeschützt.
    Ich versuche mal das Bascom Programm hier zu posten,
    hoffentlich geht das hier.

    Code:
    ' Test den 24C16 über I2C anzusprechen
    
    $crystal = 8000000
    $regfile = "m8def.dat"
    $baud = 19200
    
    Config Scl = Portb.1
    Config Sda = Portb.0
    
    Const Addressw = 160                                        'write addresse
    Const Addressr = 161                                        'read addresse
    Dim I As Byte
    Dim Adres As Byte
    Dim Wert As Byte
    
    ' zum Test Adressen 1 bis 3 schreiben
    Print "3 Werte Schreiben"
    For I = 1 To 3
       Print I;
       Input " Gib Wert  ein: " , Wert
       Adres = I
       ' Wert = 100 + I
       Gosub Write_eeprom
    Next
    Print
    
    Print "Lesen "
    Print
    
    Do
    For I = 1 To 3
       Adres = I
       Gosub Read_eeprom
       Print I ; "=" ; Wert ; " ";
    Next
    Print
    Wait 1
    Loop
    End
    
    'sample of writing a byte to EEPROM AT2404
    Write_eeprom:
        I2cstart                                                'start condition
        I2cwbyte Addressw                                       'slave address
        I2cwbyte Adres                                          'asdress of EEPROM
        I2cwbyte Wert                                           'value to write
        I2cstop                                                 'stop condition
        Waitms 10                                               'wait for 10 milliseconds
    Return
    
    
    'sample of reading a byte from EEPROM AT2404
    Read_eeprom:
       I2cstart                                                 'generate start
       I2cwbyte Addressw                                        'slave adsress
       I2cwbyte Adres                                           'address of EEPROM
       I2cstart                                                 'repeated start
       I2cwbyte Addressr                                        'slave address (read)
       I2crbyte Wert , Nack                                     'read byte
       I2cstop                                                  'generate stop
    Return
    Vielleicht hilft es ja.

  9. #19
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941

    24c65 geht nicht

    hallo schnuppel, habe dein programm genommen mit "m16def" und adresse 162 und 163. wenn ich den isp-stecker herausziehe ist er sofort da mit der meldung =255. er speichert nichts.
    im anhang ist ein schaltplan.
    mfg pebisoft
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken 24c65.jpg  

  10. #20
    Neuer Benutzer Öfters hier
    Registriert seit
    27.05.2004
    Beiträge
    24

    Re: 24c65 geht nicht

    Hallo,

    Zitat Zitat von pebisoft
    hallo schnuppel, habe dein programm genommen mit "m16def" und adresse 162 und 163. wenn ich den isp-stecker herausziehe ist er sofort da mit der meldung =255. er speichert nichts.
    im anhang ist ein schaltplan.
    mfg pebisoft
    tut mir leid, daß es nicht klappt.
    Laut Datenblatt stimmt die Adresse, in den "Optionen" alles richtig eingetragen?
    Bei mir hatte ich öfters, daß nach erfolgten Eintragungen in den Optionen und nachfolgender Kontrolle (nach Programmierung) doch andere Werte drin standen.
    Sicherheitsahlber alles was geht im Programm nochmal definieren.
    Was sagt er denn wenn du den ISP Stecker drin läßt?
    Wenn es lange dauert, so 20 Sekunden und länger, dann findet die I2C Routine keine Antwort, d.h. es ist wohl ein Hardwarefehler.
    Schaltung checken, zeige doch mal den Rest der Schaltung!?

    Hast du mal für SDA und SCL andere Pins probiert?
    Natürlich dann auch in der Hardware ändern!?
    Ich habe leider keinen m16 hier zum Testen.

    Ich hatte mal das Problem, daß der Mega8 (kann auch 4433 gewesen sein) nicht mitspielte bei RC5 senden über IR LED.
    Habe dann in der Bascom Mailingliste gefragt, daraufhin sendete mir
    Marc Albers, der Macher von BASCOM, ein neues Datenfile,
    daraufhin lief alles.
    Wollte nur sagen, liegt nicht nur bei uns, wenn was nicht klappt.
    Aber ich denke, bei dir ist es Hardwarefehler, der 24c65 kann ja auch defekt sein.
    Hast du mit 24C65 oder mit 24C16 getestet?
    Beim 24C16 sind A0, A1, A2 irrelevant, weiß nicht ob sie irgendwo
    angeschlossen sein müssen, meine liegen auf GND.
    Gib nicht auf, klappt schon irgendwann. :-)

    mfG schnuppel

Seite 2 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress