Použití I/0 portu G u ATmega64, kompatibility mód

zdravím,
narazil jsem na problém u mikrokontroleru ATmega64. Při psaní programu v jazyce C jsem se nepříjemného překvapení od AVRCodeVision, který používám pro psaní a kompilaci programů a to ten, že nelze použít port G jako I/O … teda že nefunguje ani PORTG ani PING

napadla mě jedna možnost a to že by v CV byl nastavený kompatibility mód, jako je tomu v základním nastavení tohoto mikrokontroleru, ale netuším, kde to hledat

za jakékoliv nápady děkuji

:arrow_right: administrator: přejmenováno z "Použití I/0 portu G u ATmega64"

Citace datasheetu.

Note that PORTG, DDRG, and PING are not available in ATmega103 compatibility mode. In the
ATmega103 compatibility mode Port G serves its alternate functions only (TOSC1, TOSC2, WR,
RD and ALE).

Přepni si fuse bit m103c.

asi jsem torochu špatně definoval svůj problém. fuse bit se nastavuje až při samotném programovaní čipu a to v mém případě v AVRStudiu. Můj problém je trochu odlišný a to že v CodeVision mi to nechce vzít překladač. tj. v zařízení mám ten kompatibility mód vyplý. jde vážně o to, zda CodeVision počítá se zapnutým kompatibility módem či nikoli a pokud ano, jak se to dá změnit.

Takye jsi mel na mysli, ze nelze prelozit např. PORTG.1 = 1; ale
zapis PORTG |= (1 << 1); prelozit lze, akorat nevim jestli to codevision prelozi tak aby to fungovalo. Jinak jak to prepnout v codevision aby to vzalo ten prvni zapis nevim. Dival jsem se na to, ale nikde jsem nenasel ze by to tam slo prepnout.

Příkazy typu “PORT.pin = 1” fungují jenom v oblasti IO registrů.
Porty F a G jsou už v oblasti Extended IO Registers.

Tam je možné např. použít makra

#define setb(port,pin) port |= (1<<pin) //set bit #define clrb(port,pin) port &= (~(1<<pin)) //clear bit

a pokud z portu G potrěbuji číst tak jak bych to měl zapsat?
PING |= (1 << 1) … předpokládám, že tento zápis je z logiky věci chybný

např. x = PING & (1<<PG3); // teda jesli má CV definici pro PG3
x = PING & ((1<<PG3) | (1<<PG6)); // více bitů

Toto jsou narozdíl od těch výmyslů s tečkama zápisy ansi c, takže fungují ve všech překladačích.

Jen tak pro zajímavost - co to stavíš, že ti nestačí 40 standartních I/O pinů a musíš se uchylovat k portu F a G?

CV má definované PING3 (PORTG3,DDG3 atd…)

Nedalo mi to a zkusil jsem napsat jednoduchý prográmek s použitím portů F a G a opravdu - překladač se pořád chová jako kdyby byla povolená externí paměť pro kterou jsou tyto porty rezervované.
A nepřišel jsem na to jak se toho zbavit - i když jsem schválně nastavil bit SRE v MCUCR do nuly (i když je implicitně v nule) stejně to nepomohlo.

je to na bakalářku - ovladač pro kytarový efekty. problém je to, že tam bude povíc ovládacích prvků, jako 8 enkodérů, asi 11 tlačítek a potřebuju ovládat grafický LCD a ještě komunikace s efekty…

no porty sa daju rozsirit aj inac,ked uz niesu pinyyy na uP :smiley: asi sa tomu nevyhnes

Svatá pravda, třeba dalšími procesory :smiley:
Mefisto:
Ty budeš počítat efekty (předpokládám alespoň v 16ti bitech, ale i to je dost málo) na 8-bitu a bez podpory fractional formátu? Ty jsi trochu sadista co :slight_smile:

jejda… počítat efekty to nestraš… efekty budou analogový a budou se pomocí mikrokontroleru jen ovládat… pomocí digitálních poťáků.

Tak těch jedenáct tlačítek dej do matice 3*4 a hned vyšetříš 4 piny :slight_smile: .

jo, to by bylo dobrý akorát bych bohužel musel předělat celou desku… kterou už mám hotovou… ale jinak tohle řešení mě taky mohlo napadnout… matice je dobrý nápad… tak příště su to budu pamatovat…

Este mas moznost diodovej matice to tiez usetri nejake piny… a teoreticky zrealizovatelen na stavjucej doske :smiley:

možná to tak nakonec udělám… každopádně dík…