Nefunkční program pro přenosu z ATmega8 na ATmega168

Čaute,
vo svojej aplikácii som mal implementovanú ATmegu8, žiaľ pre nedostatok miesta v pamäti programu som musel upgradovať na procesor s väčšou pamäťou. Rozhodol som sa pre megu168, lebo pinout má rovnaký, a tak som myslel, že bude stačiť len trochu zmeniť kód. založil som preto v atmelstudiu nový projekt pre megu168, nastavil som v configu frekvenciu oscilátora 8000000, prekopíropval som kód, a ponastavoval som časovače a AD prevodník podľa registrov z datasheetu ku 168čke. Fuses som nastavil na interný 8Mhz RC oscilátor, zapol som BODEN (myslím že nič viac).

kompilácia mi prebehla bez problémov, procesor som vložil do aplikácie, spustil som napájanie, ISP programátor ožil… program som napálil do pamäte, ale tým skončilo všetko čo sa dialo… procesor vzyerá, že vôbec nevykonáva program, ktorý je v ňom. Mám tam pripojený LCD display, fungujem s AD prevodníkom, rozsviecujem led diódy, a spínam okruhy… avšak ani jedna táto funkcia nezafungovala pri procáku mega168… pre vylúčenie HW poruchy som tam vložil späť mega8, ale s ňou HW beží uplne v pohode. Prehliadol som nejaký podstatný rozdiel medzi týmito dvoma procákmi?

Ešte upresním - mega168 aj keď nefunguje program, stále sa dá cez ISP programovať(čo ma mätie najviac, lebo to vyzerá, že hodinky týmpádom žijú…)

za rady vopred ďakujem.

:arrow_right: administrator: přejmenováno z "ATmega168 nebeží program"

Jaký jazyk?

Programujem to v Céčku

Překontroluj si nastavení kompilátoru na ATmegu168 a pokud zapisuješ přímo do registrů, tak způsob zápisu. Ona se totiž ATmega8 od řady ATmega48/88/168/328 mírně liší v registrech. Některé mají trošku jiné označení a některé se adresují přes paměťový prostor.

Zkus na zacatek programu dat blikani LEDkou. Zjisits jestli program jede nebo ne.
Jinak pojmenovane registry bych vyloucil - rval by kompilator

LEDku som skúšal bliknúť hneď na začiatku programu už predtým, a nič sa nedeje… všetky registry su opravene tak, aby kompilátor nepindal, a aby to podla datasheetu fungovalo na periferii spravne… večer skúsim mrknúť tie nastavenia pre procesor… som si istý len tým, že som tam zvolil megu168… nič iné som pri tvorbe nového projektu nenastavoval (okrem clock freq 8000000)

zmeraj ucc. Casto mi nesla aplikacia prave kvoli nastaveniu BOD. Funkcia je samozrejme uzitocna, ale nie nastavena na 4V pri Ucc 3.8V :slight_smile:

BOD som skúšal aj vypnúť, a mcu je stále v rovnakom stave. Mám tam na napájaní 5V. Napadlo ma , nemohli bz to spôsobovať nejaké nehandlované interrupty, alebo niečo na ten spôsob?

Máš RESET připojený přes 4k7 na VCC ? Vím, že být nemusí, ale přesto …

Ano, reset je pripojený cez pullup do logickej jednotky.

Nikdy jsem reset nikam nepripojoval, pouze primo k programatoru a funguje to bez problemu i kdyz je programator odpojeny…

ATmega168 používá, o proti ATmega8, pro funkci AD převodu ještě registr DIDR0. Zde se nastavuje jestli budou vývody ADC5D:ADC0D v režimu analog/digitál.

Pro steev: přidej kod programu, případně ještě schéma.

Čaute, tak sa mi k tomu podarilo po nejakom čase znovu dostať a polaborovať. Požičal som si EasyAVR6 ( mikroe.com/easyavr/v6/ ), a skúsil som cez tento programátor na doske naprogramovať do MCU jednoduchý blikací program… fungoval… tak som skúsil do čipu nahrať môj HEX skompilovaný v AVR štúdiu, ktorý mi cez AVRštúdio pomocou programátora AVR ISP MK2 naprogramovať síce išiel, ale nefungoval. Tento hex som teda zobral a naflashoval som ho cez túto vývojovú dosku… a tadaa…program funguje. Skúsil som teda potom napáliť program znovu cez AVRstudio(zas nefungoval), a potom som dal cez EasyAVR6 skontrolovať a porovnať obsah MCU s HEX. Výsledok bol ten, že mi EasyAVR našlo v pamäti programu cez 3000 odlišností. Otázkou teda zostáva, prečo AVRstudio s programátorom AVR ISP MKII nedokážu napáliť megu168, keď mega8 zvládajú, a 168 je v podporovaných MCU? Existuje nejaký iný SW, ktorým by som mohol ešte vyskúšať ISP programovanie cez moj AVR ISP MK II programator?

ATmega8 nieje uplne kompatibilna s ATmega168

je to aj tym ze ked nastavis kompilaciu pre MCU YXZ
je podmieneny preklad to co ti syntakticky prejde kompilatorom
nemusi vobec spravne nastavit (zapnut periferie)

Proste ten kod musis funkciu po funkcie portovat na ATmega88/168/328 jadro ktore je ine ako ATmega8 uz len seriak napriklad sa inicializuje inak na ATmega8 je nutne dodrzat poradie instrukcii alebo spravne zapnut jeden byt potom je hodnota zapisana do registra presunuta na ine pamatove miesto (nieco ako maskovany register)

nastevnik117: Program je cely preportovany, dokonca pri naprogramovani toho isteho hexu cez EASYAVR to funguje… len z atmelstudia mi ten isty hex cez AVR ISP MK2 naprogramuje uplne zle - to čo cez iný programátor ide, tak cez AVR ISP mkii proste nebeží.

zmensi rychlost komunikacie, skontroluj Ucc a poistky. Ak by nahodou programator (sw) mal poistky v stave - spusti program z bootloadera.