PIC: Lyckas bara sända en byte med I2C

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Klas-Kenny
Inlägg: 11843
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

PIC: Lyckas bara sända en byte med I2C

Inlägg av Klas-Kenny »

Försöker mig på för första gången att använda I2C i en PIC. Jag använder PIC12f1822 (Datablad) i Master Mode, 100kHz.
Själva initieringen borde vara irrelevant till frågan, men behövs det så säg till!

Det går fint att skicka en byte genom att helt enkelt skriva ett värde till SSP1BUF. Men att jag skrivit det dit så har jag en liten paus ("dödräkna" bort klockcykler i 1ms) innan jag gör samma sak igen, skriver ett värde till SSP1BUF. Men den gången så skickas då ingenting!
Kollar både med scopet och en BusPirate som I2C-sniffer, ingen av dem ser något mer än det första paketet så...

Jag tycker mig ha läst igenom den delen av databladet ett antal gånger nu utan att lyckas hitta att någonting måste göras mellan varje paket som skickas. Så, vad är det jag missar? :humm:
cyr
Inlägg: 2712
Blev medlem: 27 maj 2003, 16:02:39
Ort: linköping
Kontakt:

Re: PIC: Lyckas bara sända en byte med I2C

Inlägg av cyr »

Har inte kört I2C på något liknande chip på mycket länge, men några saker att kolla:

1) Varför vänta 1ms? Måste finnas en bit i något register som talar om när du kan skriva nästa byte...
2) Likaså måste det finnas status-bitar som talar om ifall det blir något fel.
3) Får du någon ACK?

Kan vara så att I2C-mastern helt enkelt stannar och vägrar fortsätta om det inte kommer ACK...
Användarvisningsbild
Klas-Kenny
Inlägg: 11843
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: PIC: Lyckas bara sända en byte med I2C

Inlägg av Klas-Kenny »

1) Bara för att testa. Jag tycker också att det borde finnas någon bra flagga att kolla på, men jag tänkte vänta med det tills jag fått det att fungera.
3) Japp.

Enligt databladet ska en flagga sättas ifall den får ACK, men den ska inte på något sätt stanna upp i vilket fall..
cyr
Inlägg: 2712
Blev medlem: 27 maj 2003, 16:02:39
Ort: linköping
Kontakt:

Re: PIC: Lyckas bara sända en byte med I2C

Inlägg av cyr »

Gör du (mer eller mindre) som det står under 24.6.6.4 i databladet?
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46986
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: PIC: Lyckas bara sända en byte med I2C

Inlägg av TomasL »

uChip har ett antal mycket bra appnotes om just I2C, kommer inte ihåg vaad de heter dock, men det är ju bara att söka.

Btw, vad för någon slav kör du mot?
Användarvisningsbild
Klas-Kenny
Inlägg: 11843
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: PIC: Lyckas bara sända en byte med I2C

Inlägg av Klas-Kenny »

Lyckades få ihop det hela.. :)

Det var visst min paus som förstörde det, missade att ändra bank till den variabler i pausen ligger, när jag gjorde det sedan så fungerade det utmärkt!
Nu kör jag på att kolla PIR1,3 istället, fungerar kanonbra det med.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PIC: Lyckas bara sända en byte med I2C

Inlägg av sodjan »

> Nu kör jag på att kolla PIR1,3 istället

Skriv gärna "Nu kör jag på att kolla SSP1IF istället" så blir det
hela lite lättare att läsa utan att kolla mot databladet. :-)

> missade att ändra bank till den variabler i pausen ligger,

Om du har en paus rutin som du använder ofta och från flera ställen
så kan det vara enklast att lägga rutinens variabler i SHR_DATA så
slipper du byta bank.

Förresten, PIC12F1822, det är ju en av de där ganska häftiga nya
8-pinnarna med bl.a upp till 32 MHz på intern oscillatorn. Hur tycker
du att den verkar ?
Användarvisningsbild
Klas-Kenny
Inlägg: 11843
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: PIC: Lyckas bara sända en byte med I2C

Inlägg av Klas-Kenny »

OK, ska tänka på det i fortsättningen!

Bra tips! Använder liknande nu på ett annat ställe, ska ändra det så jag slipper byta bankerna. :)

Jo precis. Jag kör den nu i 16MHz och tycker att den är riktigt smidig!
Man kan tex. flytta funktionen på periferalerna till olika pinnar så att de inte krockar med varandra eller annat, den har nästan löjligt mycket funktioner inbyggt för sin storlek och sitt pris, trevligt logiskt uppbyggd etc.
Använder den just nu till att styra en grafisk display genom I2C och att generera negativ spänning till displayens kontrast med PWM. Ska lägga in lite mera skoj som en analog läsning för batterispänning samt kommunikation med en annan processor via UART också, rätt coolt att kunna få in så mycket i en liten 8-pinnare!

Väldigt trevlig processor må jag säga. Har även använt PIC10F320 en del (fast knappt inga av periferalerna, bara PWM), den var inte riktigt lika kul med att kunna flytta funktionerna till olika pinnar och så, men fortfarande en trevlig processor till storlek och peng.
Skriv svar