Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

PIC - nejde komunikace i2C při taktování na 16 MHz

 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
VirtualMan



Založen: Mar 18, 2005
Příspěvky: 63
Bydliště: Brno

PříspěvekZaslal: ne leden 26 2014, 14:01    Předmět: PIC - nejde komunikace i2C při taktování na 16 MHz Citovat

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?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
hakamusai



Založen: Apr 17, 2007
Příspěvky: 943

PříspěvekZaslal: ne leden 26 2014, 20:04    Předmět: Citovat

V nástrojích od mikroelektroniky je nasekáno spousty chyb.Já se setkal mimo jiný s chybou u knihovny pro ovládání KS0108.Horší je,že k tomu nedávají zdrojový kódy,jako je tomu u jiných vývojových nástrojích.Člověk má možnost si to opravit.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
kony2807



Založen: Jul 29, 2007
Příspěvky: 305
Bydliště: Ostrava

PříspěvekZaslal: ne leden 26 2014, 21:09    Předmět: Citovat

Stojí za zkoušku zmenšit hodnotu pull-upů na I2C.

Taktéž - pokud není příjem/odesílání v přerušení s ošetřením zaseknutí sběrnice časovačem, nedivte se pak, že stojí celý program - občas se stává, že se I2C slave zasekne, zůstane držet SDA linku, nebo třeba nepotvrdí příjem.
Dost možná tato chyba i bude indikována nějakým příznakovým bitem v příslušných registrech modulu.

_________________
________________________________
"Představte si to ticho, kdyby lidé říkali jen to, co vědí." K.Čapek
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
VirtualMan



Založen: Mar 18, 2005
Příspěvky: 63
Bydliště: Brno

PříspěvekZaslal: po leden 27 2014, 0:41    Předmět: Citovat

Především děkuji za různé tipy.
Je to ale mrška zatvrzelá. Dali prášky podle rady, ale mraveneček na to zdá se háže bobeček... Sad

Pull-up odpory jsem zkusil různé od 2 do 10 kohm, což byly zhruba mezní hodnoty, které jsem tak nějak vyčetl z různých doporučení a datasheetů.

Na základě nějakých těch zmínek v Errata jsem si taky zkoušel hrát s hodnotou SMP_bit, ze zoufalství postupně v různých částech programu, před inicializací i2C, po ní, těsně před zápisem... Zkusil jsem přidávat sem a tam nějaké ty milisekundy čekání... vše marné.

Ošetřit sběrnici časovačem proti zaseknutí je dobrá připomínka, budu na to myslet, ale bude to mít smysl teprve v okamžiku, kdy normální stav bude že nějaké zápisy a čtení projdou, a já budu chtít ošetřit stavy, kdy se to náhodou sekne (a pak třeba zkoušet číst nebo psát znova apod.) Jenomže tady to neprojde nikdy...

Na osmi MHz to budu všechno stíhat tak tak, a kdoví jestli. Ještě se s tím zkusím nějakou dobu prát, ale mám obavu, že nezbude než upravit návrh a najít si jiný procesor.
Pokud možno stejně malý (těch 16 vývodů u QFN verze je až až), fungující na těch 16 MHz, a nejlépe taky mající o něco větší ROMku, bo tady už je těsno...
Sice nerad, a budu to považovat za svoji osobní prohru a potupu, ale někdy se holt nedá nic dělat. Evil or Very Mad

Už se mi z toho derou na jazyk samé obhroublosti.. Jémináčku namoutě kryndapána himbajs, u všech všudy to je ale zatrolená patálie...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
kony2807



Založen: Jul 29, 2007
Příspěvky: 305
Bydliště: Ostrava

PříspěvekZaslal: po leden 27 2014, 3:07    Předmět: Citovat

Máte Pickit, odkrokujte si program v debug režimu, podívejte se se osciloskopem na sběrnici, jestli vůbec něco leze ven (ideálně paměťový, podívat se, jeslti příjde ACK od slave). Nastavuje se příznak kolize (WCOL) ?

SMP bit má být podle ERRATy nastaven do nuly. Přidávání zpoždění zde nepomůže.
Ve 3V aplikaci je rozumná hodnota pull-upů spíše kolem 2k2 než 4k7.

Tip: na zaseknutý I2C slave pomáhá "zatikání" hodinama, cca 10-20 pulzů, ve zpomaleném režimu.

Vložte sem prosím úsek kódu obsluhující konfiguraci modulu a následně odesílání dat na I2C včetně umístění - je v hlavní smyčce, nebo v přerušení ?

_________________
________________________________
"Představte si to ticho, kdyby lidé říkali jen to, co vědí." K.Čapek
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
VirtualMan



Založen: Mar 18, 2005
Příspěvky: 63
Bydliště: Brno

PříspěvekZaslal: po leden 27 2014, 18:43    Předmět: Citovat

Volejte exorcistu!
Tak jsem sednul, udělal kopii toho mého programu a postupně jsem z něj vyčesal všechno zbytečné, aby tam zůstalo jen to důležité a já to mohl uploadovat sem. Cvičně jsem to přeložil a ono to FUNGOVALO!

Tak jsem si řekl, že asi mám něco nekorektního někde v tom odebraném kódu a postupně jsem tam cut&paste naskládal po kouskách všechno zpátky. Jediné, co se snad zmenilo, je pořadí jednotlivých funkcí ve zdrojovém kódu, protože jsem to tam doplňoval postupně podle toho, co zrovna při překladu chybělo.

Teď to tam zase všechno je - a ono to i na těch 16ti MHz FUNGUJE!

Nevím, nechápu, nerozumím..... Shocked
Ten předchozí kód na 8mi MHz fungoval na PIC16F1825 a na 8 i 16 MHz na PIC 16F1938...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.20 sekund