Ik ben op internet deze servo interface tegen gekomen:
http://www.min.at/prinz/oe1rib/I2C-Servo/

Mooi klein ontwerp, en de code om de PIC te programmeren zit er bij, net als de commando's om de PIC aan te sturen.
En daar begint mijn probleem, dat ik er dus totaal geen wijs uit wordt. Waarschijnlijk maak ik een grote denk fout, maar hopelijk zijn hier experts genoeg die mij de juiste richting in kunnen sturen...

Ik heb de PIC16F819 geprogrameerd, en deze lijkt te werken, want mijn servo's gaan bij het aansluiten van de spanning meteen naar de neutraal positie (de servo's blijven bekrachtigd in deze positie en zijn niet met de hand te verplaatsen wat aangeeft dat het signaal blijft sturen).

Ik heb een 16F628A aangesloten om de servo interface aan te sturen met het volgende test programmatje:


Device 16F628A           
Config INTRC_OSC_CLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL true

Declare SCL_PIN = PORTB.0 
Declare SDA_PIN = PORTB.1
Declare SLOW_BUS On

Clear
DelayMS 500

loop:

BStart '12345678
BusOut %00110000 ' PIC16F819 adres met jumpers A0, A1 en A2 doorverbonden
BusOut %00000000 ' Set servo position CMD
BusOut 255       ' Servo naar rechts
BusOut 0         ' Servo 0 op pin 17
BStop

DelayMS 1000

BStart '12345678
BusOut %00110000 ' PIC16F819 adres met jumpers A0, A1 en A2 doorverbonden
BusOut %00000000 ' Set servo position CMD
BusOut 0         ' Servo naar links
BusOut 0         ' Servo 0 op pin 17
BStop

DelayMS 1000
GoTo loop

End

Het zou dus de bedoeling zijn dat de servo op pin17 (servo 0) eerst naar rechts gaat, en een seconde later naar links, en weer terug. Wat ik uit de website begrijp is dat je eerst het adres van de PIC stuurt, dan een commando om een servo te sturen, waar de servo naar toe moet, en welke servo het moet gaan doen. Dat heb ik dus gedaan, maar dat doet niks.
Ik ga ervanuit dat ik het compleet fout heb gedaan, dus wie helpt mij de goede richting op ?

Alvast vriendelijk dank allemaal !!

Een 16F628A heeft geen I2C hardware...

Klopt, maar je kunt hem wel gebruiken om een I2C slave aan te sturen. Ik heb dit met o.a. de PCF8574 gedaan en dat werkt perfect.
En aangezien de Servo interface (PIC16F819) werkt als een I2C slave, zou dat toch moeten werken ?

Daarvoor heb je bij de 16F628A een stukje software nodig die het I2C gebeuren afhandeld.

Ik weet te weinig van basic om te bepalen of I2C zo software matig werkt...

ik zie geen Xtal waarde
Ik zie wel een slow_bus. Dit is alleen nodig bij een Xtal hoger dan 4mhz dacht ik
Weet je zeker dat je de adressing goed doet? Dus 8 of 16 bit?
Heb je pullupjes op de signalen? (beetje een "zit de stekker er wel in" vraag, maar toch, ik vergeet ook wel eens iets simpels)
Ik lees dat je 2 pinnen gepull-uped hebt en ik zie 2 enen... Klopt dat? EDIT: heb even die site gelezen: pullup betekend hier 0 want het is inverted. Zeg dat dan...
verder lijkt het hier alsof je probeert los een 0 te sturen voor "het is servo 0". Deze 0 moet echter al in het "beweeg-de-servo"commando zitten, als ik die website goed lees. De laatste busout0 moet dan weg en het zou moeten werken. Om een andere servo te kiezen moet je de juiste bits in het command byte instellen:

The command follows in byte number two. Bits 7-3 represents the command and bits 2-0 the servo. Commands which are valid for all servos ignore bits 2-0.

@ MMsoft: het zou wel zo moeten werken, er bestaat ook een Hbus commando wat wel de harware I2C doet.

[Bericht gewijzigd door Lucky Luke op (38%)]

Sorry voor de onvolledige info LuckyLuke, maar ik ben nog redelijk nieuw hierin. Ik heb inderdaad pullup weerstanden over de I2C CLK en DTA staan.
Het kan aan mij liggen, maar echt duidelijk vind ik de website niet.
Dus als ik het goed begrijp:
command %00000 en servo: 000 wordt samen %00000000
dus bijvoorbeeld servo7 zou dan %00000111 worden...

Ga ik proberen, bedankt!

YES !!

Het werkt... Heel erg bedankt voor de hulp !!!

YES !!

Mooi dat het werkt!