Uživatelské jméno:   Heslo:   Pamatuj si mě  

Trable s Pinguinem

 Tisknout 

Před časem jsem zvolil Pinguino jako základ pro LED matici, která byla stavěna na Elektrotáboře. Narychlo vyřešený program se mi však nedařilo uchodit tak, jak jsem si představoval. RGB matice, konstruovaná letos mi připravila také několik krušných chvil a při požadavku na komunikaci přes USB, čtení času z RTC po I2C sběrnici a také současném zobrazování běžícího textu opět nastával problém.  V článku uvedeny dosavadní zjištění.

Takže to vezmu postupně.

USB komunikace: Pinguino pro PIC32 aktuálně "umí" jen CDC což je emulace sériového portu. No ale co když máme "malý" procesor PIC32MX250? Sdílení portů s různými funkcemi včetně USB a problém je na obzoru. Co se mi stalo? No například SPI port, který jsem použil u wobbleru a který naprosto bez problémů fungoval s kódem napsaným v MPLABX a "čistém" C, fungoval také na Pinguinu, ale jen do doby, než jsem zavolal "zobrazení" dat pomocí funkce CDC.printf . V tom okamžiku přestal fungovat SPI. Téměř dva dny mi trvalo, než jsem přišel na to, co je špatně a výsledek asi překvapí! Problém dělala špatná konfigurace bootloaderu, která vychází z originálu od Microchipu (otázka nakolik je upravená od originálu, toto jsem nezjišťoval)
Konfigurace USB totiž znemožnila sdílení portů u pomocných signálů USBON a USBID a tyto byly natvrdo aktivní při zapnutí modulu USB v procesoru.
Řešení je prosté, je nutné na adrese 0x0BF0 (DEVCFG3) změnit z hodnoty 0xCFFFFFFF na 0x0FFFFFFF.
Po překročení kódu přes adresu 0x7fff, což dělá u pinguina asi 14500bytů (14,5kB zabírá bootloader resp. uživatelský kód začíná od 0x4A00), opět problémy... naštěstí pár nadšenců upravilo kód, viz fórum anglicky zde http://www.pinguino.cc/forum/showthread.php?tid=4389
Fórum požaduje registraci pro stažení souboru, nicméně dovolil jsem si jej dát k dispozici na uvedeném odkazu zde HIDBoot_MX250n.hex
Nicméně, jak jsem zjistil, tak v případě dalšího nahrátí kódu není změněna část nad 0x8000, takže opět problém?? No vypadá to, že překvapením ještě není konec. Přepsat tak bootloader a poté mít možnost jedenkrát nahrát kód přímo přes Pinguino IDE tak ztrácí poněkud na užitečnosti tohoto systému... Tento článek tak budu nejspíš při dalších zjištěních aktualizovat.

Rutiny pro komunikaci po I2C:

LEDmatice i RGBmatice vykazovala problémy při využití rutin a tak jsem přepsal své emulační rutiny I2C z procesorů x51 na Pinguino. Zde vše fungovalo, ale nedávalo mi "spát" proč to nejede pomocí rutin, ikdyž jsem využil příkladu, který se zdál být funkční... ale občas tuhnul.
Řešením byla nutnost důkladného studia i2c.c a také datasheetu PIC32. Zjistil jsem, že v demo příkladu byla naprosto nepochopitelná chyba. Využívalo se faktu, že neodesláníé ACK umožní v dalším kroku opětovné čtení dalšího byte. Nicméně v demu bylo čtení vždy s nepotvrzením a potvrzení bylo vysláno až při posledním byte... jenže pak bylo ve skutečnosti o jeden "tik" hodin navíc na konci a dost možná, že I2C EEPROM to snesla, ale RTCC obvod co jsem použil ne. Stačila tedy úprava, aby se přímo zavolalo při posledním byte čtení s ACK bez následného "umělého" vyslání ACK bitu a vše bylo tak jak má být.
Co k tomu říct? No prostě když jedni píšou knihovny a modifikují aniž by se zkontrolovala funkčnost příkladů, je to pak těžko.

Částečná funkčnost na WIN7:
Některým Pinguino nechodí korektně na WIN7 a vyšších (Vista nezkoušena). Nejčastěji se tváří, že kompiluje, ale jinak se nic nestane. IDE chodí jak má. Řešením je nakopírování přímo do rootu tj. c:\PinguinoX.4 . Většina totiž adresář s oblibou nechá na ploše. Win7 moc nesnáší kopírování čehokoliv přímo do rootu, takže někteří musí SW spouštět "jako administrátor". Nicméně v uvedeném umístění vše chodí jak má.

Závěr:
Rozhodně nelze doporučit začátečníkům, aby se pouštěli do hraní si s podobnými projekty jako je Arduino nebo Pinguino... případně další ..????ino. Pokud si chtějí "osahat" nějaký CPU, doporučuji vřele začít s něčím menším, méně komplikovaným. Já třeba preferuji v tomto případě řadu MSP430G2xxx od Texas Instruments a free prostředí IAR Kickstart. Rozhodně ne SDCC od TI, které je moloch s podporou také DSP a docela málo "user friendly". Rozhodně "LaunchPady", jak jednoduché kity nazývá TI, podporují ladění programů a to je dost značná pomoc. Pinguino ani Arduino neumí krokovat program v případě chyby a začínající tak musí psát způsobem "pokus-omyl", tak jako kdysi my v dřevních dobách na 8080, Z80 případně x51.

Hodně zdaru a v sekci ke stažení je "opravená" verze Pinguino 10.4 rev.999. Stačí rozbalit a zkopírovat na disk např c:\

73! Robin OK2UWQ





Počet shlédnutí: 2665