Stránka 1 z 1
Záměna Atmega168 za Atmega16
Napsal: 31 kvě 2017, 22:08
od bart1
Hraji si ze stavbou VKV tuneru s SI4735.
http://www.elektronik-labor.de/ElektorD ... oDSP5.html
Bascom je relativně intuitivní prográmek a po vzpomínkách na Basic se mi podařili úpravy k obrazu svému.
Nicméně pak jsem chtěl vyzkoušet vyměnit Atmega168 za Atmega16.
Důvod byl větší počet volných pinů. Chtěl bych do menu dát i přepínání vstupů pro zesilovač, zapínání fyz. řízení hlasitosti a podobné blbinky.
Nicméně po změně $regfile pro Atmegu16 a nové nadefinování portů pro displej a tlačítka a korektního převedení na HEX soubor a nahrátí se nic nestane ... .
Je možná tato záměna? Resp. musí se udělat větší změny v SW???
PS: jsem začátečník, Bascomu se věnuji teprve 3 měsíce
Napsal: 01 čer 2017, 00:02
od mtajovsky
Bascom neznám, ale předpokládám, že je to jazyk takové úrovně, že stačí jen předefinovat typ procesoru a potřebné změny v ovládání HW procesoru jsou udělány automaticky. Nejprve bych vyzkoušel na ATmega16 přesně stejný program jako na ATmage168, jestli to bude fungovat. Tím se zjistí, jestli si Bascom hladce poradí se změnou procesoru. Pak postupně přidávat vlastní rozšíření.
Napsal: 01 čer 2017, 07:56
od AB1
Máš nastavený malý stack.
Zkus jestli pomůže
Kód: Vybrat vše
$hwstack = 128
$swstack = 64
$framesize = 64
Napsal: 01 čer 2017, 08:34
od Ondra2
Já teda bascom taky neznám, ale portoval jsem 2 projekty ze základní Megy (8/16/32) na MeguXX8 (48/168/328) v C a vzhledem k tomu, že se liší HW těch procesorů, to bylo na pár hodin předělávání kódů. Když už nic, je tam jiná reference (2.56V vs 1.1V) a registry pro ovládání časovačů/čítačů jsou jiné.
Napsal: 01 čer 2017, 09:03
od Ruprecht
Fuse bity nastaveny správně? JTAG zakázaný?
Napsal: 01 čer 2017, 16:36
od nekmil
Kontrolní otázka: jakou verzi Bascomu používáš ?
Když spustím v obou verzích Tvého programu "kontrolu syntaxe" vyhodí mi chyby na stejném místě
Error : 25 Line : 32 Variable already dimensioned [Variable already dimensioned] , in File : J:\Z1_18_00c.bas
"Dim R1 As Byte , R2 As Byte , R3 As Byte"
Napsal: 01 čer 2017, 17:46
od bart1
Děkuji za rady. Používám verzi 2.0.7.5. Program je v obou případech přeložen bez chyby. S Atmegou168 funkční, v druhém případě ne.
Změna na $hwstack = 128, $swstack = 64, $framesize = 64 nepomohla.
Fuse byty jsem neměnil.
Napsaný velice jednoduchý prográmek - zmáčkneš tlačítko a přičte se 1 se zobrazím na displeji mi funguje u obou procesorů.
Je také otázka zdali soudruzi z NDR někde neudělali chybu
Resp, jak jsou napsány podprogramy pro SI4735. Bohužel se nějak nerozepisují.
Jejich zveřejněná poslední verze:
https://www.elektormagazine.com/labs/en ... dio-si4735
se chovala úplně divně.
Když se to nepodaří, neva. Základ mi s A.168 funguje. A zesilovač dořeším jinak.
Napsal: 01 čer 2017, 20:30
od Ruprecht
Na fotkách v odkazu vidím krystal, předpokládám, že slouží k taktování megy (podle SW 8MHz). Z výroby je ale clock nastaveny na interní 1MHz oscilátor, minimálně toto může být důvod nefunkčnosti. JTAG je z výroby aktivní (portc.2-5). V obsluze přerušení TIM0_isr mi přijde podivný "pinc".
A hlavně - R0-R31 jsou registry (viz chyba nekmil), opravdu chceš do nich přímo zapisovat a číst? Nebo mají být R1-R13 ve tvém SW normální bytové proměnné? Pak je přejmenuj.
Napsal: 02 čer 2017, 07:04
od AB1
Nicméně po změně $regfile pro Atmegu16 a nové nadefinování portů pro displej a tlačítka a korektního převedení na HEX soubor a nahrátí se nic nestane ... .
To znamená co? Ani displej nic neukazuje?
V kódu nevidím nic specifického pro M168. Měl by chodit s M16 beze změn.
Zkusil bych napřed zapojit piny M16 stejně jak byly u M168.
U M16 nastavit kmitočet 8 MHz.
Pro interní osc 8 MHz
Fuse low = E4
Fuse high = D9
Pro krystal 8 MHz
Fuse low = FD
Fuse high = D9
Zkusit neupravený původní kód.
Pak teprve dělat postupně změny v kódu.
Napsal: 02 čer 2017, 08:24
od bart1
Díky za typ. Pojistky jsem nenastavoval. Začátečnická chyba.
To i vysvětluje proč v originální verzi mi neodpovídali časy na zamáčknutí tlačítka - muselo se podržet znatelně déle než byly v programu nastaveny časy.