Problém s SPI na ATMEGA328 ?

ok1uga na volny.cz ok1uga na volny.cz
Středa Únor 3 17:07:47 CET 2021


Zdravím,
 
Mám problém. Píšu SW který má za úkol přijmout data z CAN sběrnice, přepočítat přijatá binární data na reálné hodnoty a zobrazit je na displeji Nextion. Nic světoborného. Pro komunikaci s CAN sbernicí používám obvod MCP2515 který je k procesoru připojen SPI rozhraním.
 
Celý SW mám hotový a odladěný na zkušební desce s ATMEGA32. Problém nastal po přesunu SW do cílového modulu s procesorem ATMEGA328. Využil jsem konstrukci modulu který jsem navrhl na jaře a byl určen pro procesor ATMEGA8. Bohužel program trochu nabobtnal a do ATMEGA8 už se nevejde. Proto jsem použil procesor MEGA328, který je s MEGA8 pinově kompatibilní a domníval jsem se, že program bude fungovat i na tomto procesoru.
 
Problém je v tom, že se mi program většinou zastaví při komunikaci s SPI a čeká na odpověď od MCP2515. Ale někdy - nejčastěji těsně po zapnutí napájení několik zpráv načte a zobrazí, ale vždy se nakonec kousne tím že čeká na MCP2515. Přesněji - čeká až se nastaví SPIF flag v procesoru, což znamená dokončení přenosu. A ten SPIF flag se nenastaví čímž to skončí a program se zastaví.  Nejprve jsem hledal problém v časování sběrnice, ale zjistil jsem že kmitočet SCK (pokud ho stihnu odchytnout) je stejný jako u vysílacího modulu s ATMEGA8 který bez problémů funguje - pro SPI je použit stejný kód. Pročítám DS MEGA328 ale nemůžu přijít na žádný rozdíl mezi MEGA8 a MEGA328 který by mohl způsobit tento problém.
Program běží v hlavní smyčce. Pokud MCP2515 přijme CAN Zprávu vyvolá přerušení ve kterém se nastaví příznak přijaté zprávy. V hlavní smyčce se pak zpráva přečte, vyhodnotí zda je určena pro tento modul a pokud ano zobrazí se vyhodnocené výsledky na displeji Nextion.
Knihovny které pro ovládání MCP2515 používám jsem napsal (repektive opsal :-) ) na jaře a používám je ve stejném HW s ATMEGA8 bez jakýchkoliv problémů. MCP2515 mám ve výměnném modulu. Výměna modulu za ten co jsem měl připojený ke zkušební desce nepomůže, takže v MCP2515 problém není.
 
A teď můj dotaz - nenapadá někoho nějaký rozdíl mezi MEGA8 a MEGA328 který by mohl způsobit problémy v komunikaci po SPI ? V procesorové technice jsem začátečník a předpokládám že mi něco uniká ale nemůžu na to přijít.
 
Dík za všechny rady,
 
    Martin.


Další informace o konferenci Hw-list