i²c Übertragung, Hilfe

dg2ygq

Neues Mitglied
23. Juli 2007
239
0
0
Bielefeld
Sprachen
:confused:
Nun möchte ich in Bascom ein PLL-IC über i²c ansprechen.
Es handelt sich um das U6205b von Themic:
http://pdf.chinaicmart.com/U62/U6205B.pdf

Insgesamt müssen 4 Byte übertragen werden.
Werden die 4 Bytes in einem Durchgang übertragen ?
Welche Geschwindigkeiten / Einstellungen muss ich einstellen?
In welche Richtung wird übertragen (MSD / LSB) ?

Könnt ihr mir ein Bascom Beispiel posten, so dass ich sehen kann wie die Befehle und die Abläufe geschrieben werden müssen?
 
Hallo,

Insgesamt müssen 4 Byte übertragen werden.
Werden die 4 Bytes in einem Durchgang übertragen ?
Welche Geschwindigkeiten / Einstellungen muss ich einstellen?
In welche Richtung wird übertragen (MSD / LSB) ?
nach meiner Ansicht steht das in der Tabelle am Anfang von Seite 4.
So wie es aussieht muß man die nur von oben nach unten abarbeiten.
Also Adresse, ProgrDivByte1, ProgrDivByte2, CtrlByte1, CtrlByte2

Was anderes hab ich im Datenblatt auch nicht gefunden.
Man muß da ein wenig "interpretieren" ;)

Gruß
Dino
 
Hallo,

die Daten werden, wenn ich das Datenblatt richtig lese, in einem Rutsch geschrieben:

Code:
I2cstart                                          'Start
I2cwbyte slaveadress                               'Sende Slavadresse
I2cwbyte PDB1                                        'Sende Prog.Divider Byte 1
I2cwbyte PDB2                                        'Sende Prog.Divider Byte 2
I2cwbyte CB1                                          'Sende Control Byte 1
I2cwbyte CB2                                          'Sende Control Byte 2
I2cstop
 
Hmmm, tut noch nicht :(

Hardwaremäßig kommen an Sda und Scl je Pullups? Habe je 10k genommen.

Muss ich, wenn ich die Standart-Pinc C4 und C5 nutze, trotzdem auch Sda und Scl Configurieren?

Die Adresse vom u6205 lautet 194, da ich Pin7 (AS) offen gelassen habe?
Demnach wäre das Adressbyte "11000010" ?

Hier mal mein bisheriger Code: Übertragen werden soll bei PDB1 + PDB2 6508

Code:
$regfile = "m8def.DAT"
$crystal = 10240000

Dim Slaveadress As Byte
Dim Pdb1 As Byte
Dim Pdb2 As Byte
Dim Cb1 As Byte
Dim Cb2 As Byte

Config Sda = Portc.4
Config Scl = Portc.5
I2cinit

Slaveadress = &B11000010
Pdb1 = &B00011001
Pdb2 = &B01101100
Cb1 = &B11000000
Cb2 = &B10000000

Config Portb.3 = Output

Ocr2 = 2
Config Timer2 = Timer , Clear Timer = 1 , Compare = Toggle , Prescale = 1

Waitms 500

I2cstart                                                    'Start
I2cwbyte Slaveadress                                        'Sende Slavadresse
I2cwbyte Pdb1                                               'Sende Prog.Divider Byte 1
I2cwbyte Pdb2                                               'Sende Prog.Divider Byte 2
I2cwbyte Cb1                                                'Sende Control Byte 1
I2cwbyte Cb2                                                'Sende Control Byte 2
I2cstop

Do
Loop

End

Wenn ich das doch nun richtig sehe, könnte ich doch auch das PLL-IC abfragen, welches BitMuster es bekommen bzw verstanden hat?
 
Hi Micha,

für die Verwendung des HW-TWI-Interface muss Du die korrekt Lib einbinden!

Code:
$lib "i2c_twi.lbx"

Weiter würde ich die initialisierung anders machen. ich würde zunächst die Geschwindigkeit auf 100kHz reduzieren. Infos dazu stehen aber im Datenblatt zum Baustein. Da habeich icht nachgeschaut und vielleicht kann er auch 400kBaud.

Code:
Config Sda = Portc.4
Config Scl = Portc.5

I2cinit                                                     ' we need to set the pins in the proper state

Config Twi = 100000

Ansonsten kannich zunächst keine Fehler finden. Ich würde das nun zunächst mit den Änderungen mal probieren. Wenne s dann imer noch nicht funktioniert muss ich mir mal das Datenblatt genauer ansehen.

Hier noch der Code nach Umbau:
Code:
$regfile = "m8def.DAT"
$crystal = 10240000

$lib "i2c_twi.lbx"                                          ' we do not use software emulated I2C but the TWI

Dim Slaveadress As Byte
Dim Pdb1 As Byte
Dim Pdb2 As Byte
Dim Cb1 As Byte
Dim Cb2 As Byte


Config Sda = Portc.4
Config Scl = Portc.5

I2cinit                                                     ' we need to set the pins in the proper state

Config Twi = 100000


Slaveadress = &B11000010
Pdb1 = &B00011001
Pdb2 = &B01101100
Cb1 = &B11000000
Cb2 = &B10000000

Config Portb.3 = Output

Ocr2 = 2
Config Timer2 = Timer , Clear Timer = 1 , Compare = Toggle , Prescale = 1

Waitms 500

I2cstart                                                    'Start
I2cwbyte Slaveadress                                        'Sende Slavadresse
I2cwbyte Pdb1                                               'Sende Prog.Divider Byte 1
I2cwbyte Pdb2                                               'Sende Prog.Divider Byte 2
I2cwbyte Cb1                                                'Sende Control Byte 1
I2cwbyte Cb2                                                'Sende Control Byte 2
I2cstop

Do
Loop

End

Grüße,
Markus
 
Hallo,

du kannst nach jedem I2C-Befehl die interne Variable ERR abfragen. Wenn diese 0 ist wurde der Befehl vom Slave empfangen und mit Ack quittiert. Bei ERR=1 kam es zu einem Fehler.
 
Neee, macht immer noch nichts :mad:
Kann aber durchaus auch ein Hardwarefehler sein, vielleicht habe ich aber auch nur ein Bit falsch gesetzt.
Das PLL wird mit 1.280 Mhz betrieben, ergibt ein Raster von 2,5kHz.
6508 * 2,5 = 16,270Mhz. Prescaler 1.

Sefan,
das mit ERR klingt gut. Ich habe den Mega8 allerdings auf einer Lochraster ohne Seriellen Anschluss.
Könnte ich mir über eine Variable die ERR auslesen, und dann je einen Portbin auf High schalten, so dass ich einfach mit dem Multimeter "gucken" kann welches Byte nicht richtig übertragen wurde?
Geht das auch schon beim AdressByte?
 
Hi,

bau mal nach dem Config Twi = blablabla noch das folgende Statuement ein:

Code:
Twcr = &B00000100
Grüße,
Ma
 
Nun läufts ...

Der Fehler musste in der Hardware gelegen haben, denn ich habe die Schaltung noch mal neu aufgebaut, und schon funktionierte es auf anhieb.

Dann will ich nun mal noch ein wenig mit dem Code experimentieren.

Danke für eure Mühe(n)


Micha
 
Hi Micha,

na dann ist ja gut. Gelernthaben wir alle was und wennd as Problem auch auf diese Weise behoben werden kann, ok :D

Eingelöstes problem ist ein gute Problem :rolleyes:

Grüße,
Markus
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)