PIC - nejde komunikace i2C při taktování na 16 MHz
Napsal: 26 led 2014, 14:01
Ahoj všem!
Dnes jsem strávil další noc bádáním nad zakletým i2C.
Procesor PIC16F1825, interní oscilátor, napájení stabilizované 3.3V.
Na i2C sběrnici jsou pull-up odpory 4k7 a je připojeno tlakové čidlo BMP085.
Vývojové prostředí mikroC PRO for PIC v. 6.0.1
Pickit 2, App ver. 2.61.00, Device file ver. 1.62.14, OS Firmvare ver. 2.32.00
i2C clock jsem zkoušel v rozsahu od 100 kHz do 1 MHz
Pokud je PIC taktován na 8 MHz, všechno funguje jak má. Jestliže ho taktuju na 16 MHz, pak se v okamžiku kdy se pokusím o zápis do i2C program "sekne". Nebude to problém jen toho jednoho kusu procesoru, protože s tímto už jsem se na 1825 setkal, ale tenkrát jsem to nemusel řešit, tak jsem to nechal být.
Když tentýž program zkusím v PIC16F1938, všechno funguje jak má. Už jsem začal podezřívat i překladač, že snad má něco špatně v definicích pro 1825. Zkusil jsem teda do 1825 nasypat program zkompilovaný pro 1938 a výsledek byl stejný. Při taktování na 8 MHz chodí, při 16 MHz se zasekne. (přitom by měl běhat až do 32 MHz)
Ten zápis se tam zastaví jakoby na něco čekal. zajímavé je, že občas když se dotknu nožky SDA sondou osciloskopu, tak se program zase rozběhne. Jakoby čekal na nějaký impuls.
Konfigurační registry:
CONFIG1 :$8007 : 0x3FE4
CONFIG2 :$8008 : 0x1613
Konfigurační byte pro oscilátor:
OSCCON=0b01111010;
Připadá mi to že jsem vyzkoušel už snad všechno, a začínám hledat telefonní číslo na exorcistu.
Neznáte někdo nějaké účinné zaříkávadlo?
Dnes jsem strávil další noc bádáním nad zakletým i2C.
Procesor PIC16F1825, interní oscilátor, napájení stabilizované 3.3V.
Na i2C sběrnici jsou pull-up odpory 4k7 a je připojeno tlakové čidlo BMP085.
Vývojové prostředí mikroC PRO for PIC v. 6.0.1
Pickit 2, App ver. 2.61.00, Device file ver. 1.62.14, OS Firmvare ver. 2.32.00
i2C clock jsem zkoušel v rozsahu od 100 kHz do 1 MHz
Pokud je PIC taktován na 8 MHz, všechno funguje jak má. Jestliže ho taktuju na 16 MHz, pak se v okamžiku kdy se pokusím o zápis do i2C program "sekne". Nebude to problém jen toho jednoho kusu procesoru, protože s tímto už jsem se na 1825 setkal, ale tenkrát jsem to nemusel řešit, tak jsem to nechal být.
Když tentýž program zkusím v PIC16F1938, všechno funguje jak má. Už jsem začal podezřívat i překladač, že snad má něco špatně v definicích pro 1825. Zkusil jsem teda do 1825 nasypat program zkompilovaný pro 1938 a výsledek byl stejný. Při taktování na 8 MHz chodí, při 16 MHz se zasekne. (přitom by měl běhat až do 32 MHz)
Ten zápis se tam zastaví jakoby na něco čekal. zajímavé je, že občas když se dotknu nožky SDA sondou osciloskopu, tak se program zase rozběhne. Jakoby čekal na nějaký impuls.
Konfigurační registry:
CONFIG1 :$8007 : 0x3FE4
CONFIG2 :$8008 : 0x1613
Konfigurační byte pro oscilátor:
OSCCON=0b01111010;
Připadá mi to že jsem vyzkoušel už snad všechno, a začínám hledat telefonní číslo na exorcistu.
Neznáte někdo nějaké účinné zaříkávadlo?