BASCOM - Komunikace RS 232 - ATmega ČTE ale nejde PSÁT

Martin…

ano, zkoušl jsem na předchozích pokusech s MAXEm připojit pin 2 přes kondenzátor na + zdroje i - zdroje a vždy to fungovalo, zde problém opravdu nebude…spíše, jak jsem psal panu AB

AB, máte pravdu,

když přerušovaně jezdím po pinu 2 na ATMEGA8 uzemněným drátkem, na terminálu se mi objevují náhodné znaky…

to tedy znamená…že příjem signálu na atmega8 je OK, ale vysílání je KO…že…

ale co teď…prosím?

něco je buď s vysílačem nebo s přijímačem,

ještě jsem zapomněl dodat, že program nahrávám dočipu pomocí PONYPROG2000

pouzivam toto nastaveni fusebitů
tyto jsou zaskrtnute:
bootsz1 bootsz2 suto cksel3 cksel2 cksel1

Nejprve k fuse bitům.

Tak jak píšete je nastavený “extern clock”, to jest oddělený oscilátor jehož výstup je připojený k pinu XTAL1.
Kdyby fuse bity byly opravdu takto nastaveny, tak by AVR vůbec nekomunikoval s Ponyprogem.

Na jiném místě tuším píšete něco o interním oscilátoru 1 MHz.
Podívejte se na engbedded.com/fusecalc/

Vaše nastavení pro int.osc. 1MHz má být
Zatrženo: BOOTSZ1 BOOTSZ0 SUT0 CKSEL3 CKSEL2 CKSEL1
To je tovární nastavení s jakým se čip prodává.

Četl jste v Ponyprogu fuse bity tlačítkem read?
Měnil jste je už někdy?

Přesněji to znamená, že Atmega správně vysílá a znaky dojdou do PC ,
a má snahu přijímat ale nedojdou k ní znaky z PC.

Podle vašeho testování s ledkou znaky z PC na max232 přicházejí.
Takže to vypadá, že signál ve směru od PC neprojde maxem.

To ale znamenitě koliduje s vaším tvrzením že při propojení TXD RXD se znaky vrací do PC.

Takže jsem z toho trochu perplex.

Pardon,
Teď se dívám, že vlastně máte fuse bity správně.
Vidíte, že jsem z toho opravdu perplex.

Z toho, ze ATmega odvysiela nekjaku spravu do PC a ta je tam citatelna, vyplyvaju minimalne dve veci.

  1. ATmega zije a funguje v zmysle Xtal pracuje, program sa vykonava.

  2. ATmega vysiela spravnou prenosovou rychlostou, z toho plynie istota, ze ako Xtal, tak aj poistky su spravne nastavene.

Tam chybu nehladajte.
Ako tu uz niekto radil, vyskusajte najprv nejaky programik, ktory znak co prijme, inkrementuje o jednotku a to hned vysle do PC. Dajte vediet, ci toto funguje. Az potom mozete ist skumat, ci Vami vyslane znaky z PC ATmega interpretuje spravne ako cislo, alebo nie.
Skratka vzdy vsetko postupne a v malych krocikoch, ktore casom vydlazdia cestu k vitazstvu ducha (toho programatorskeho samozrejme) nad hmotou. :slight_smile:

Obávám se že jste nesledoval diskuzi dost pozorně.
O takovém programu (kromě inkrementace) se už nějaký čas bavíme.

To AB: Vy ste mu to sice radil, ale Vas program nema najmensi dovod vyslat skupinu znakov “STRAT” ako je uvedene v prispevku z 8.8 o 12:54.
Aspon to vo Vasom zdrojaku nevidim, mozno je to nejaka specia BASCOMu, ale to uz neviem posudit. Z toho usudzujem, ze “Anonymni” nerobi to co mu radite uz niekolko prispevkov a preto ho k tomu opatovne vyzivam.
Od vtedy som zaregistroval ze stracha drotikom po pinoch a zistil ze to “funguje”. Ale skusenosti s pouzitim programu prijmi / vysli znak som nejak nezaregistroval.
:smiley: :smiley: :smiley:

Prosím, už nevím coby…

poslali byste mi někdo HEX nějakého ultrajednoducheho programku pro 2400 baud , com1 , ktery by pos stisknuti klavesy, tuto danou klavesu vypsal v terminalu? Prosím o to proto, jestli chyba neni v bascomu…
jestli cecko tohle vyresi…

v tom pripade bych zanevrel na bascom…

muzu prosím někoho o toto pozadat? V cecku totiz neumim…

za pripadny soubor dekuji

Program v céčku, ne v bascomu tím myslím…

No dobre, to by nebol az taky problem, ale ako to dopadlo so skuskou
hex z prispevku od AB

PříspěvekZaslal: 08 srpen 2009, 12:34

v ZIpe je aj hex, ktory jemu funguje. Ak hex funguje, je jedno ci bol vytvoreny v C-cku, alebo v BASCOMe, alebo v kerej materi :slight_smile: . Pisali ste, ze ste program testovali. Ten BASCOM, alebo priamo ten HEX?
Musite naozaj pisat konkretnejsie, lebo navstevnici tohto fora nie su jasnovidci. Tak isto ste nenapisali, ako dopadol LEDkovy test po prepolovani diody. Skusenost, ktoru se popisali - ze na vystupe 12 svieti LED by indikovala, ze niekde v programe mate nastavene, ze pin RX0 je vystupny a ma hodnotu 0. Teda ak ste anodu diody dali na +5V a katody cez odpor na pin 12 MAX232. Tak sa to totizto ma merat. Ale na strane RS232 sa to merai opacne - ako som uz pisal. To ale nepisete, co ste presne urobili, takze sa Vam velmi tazko radi. Dal ste diodu medzi pin 12 a +5V, alebo medzi pin 12 (MAX232) a GND? To je potom celkom “des” Vam k niecomu dopomoct.

Kedze Vam spravne funguje echo po prepojeni pinu 12 (MAX232) a pinu 11 (MAX232), z toho implicitne vyplyva, ze ste diodou merali nieco zle.

Skuste popisat Vase experimenty, ale co mozno najpresnejsie.

Ako som spravne pochopil dobry HEX uz mate, tak dajte vediet co a ako. Ale prosim PRESNE. Inak nema zmysel ani odpovedat. - A to sa tu celkom snazime. :slight_smile: :slight_smile: :slight_smile:

Když z patice vyndám ATMEGU a propojim drakem RXD a TXD takna pinu 11 a 12 MAXE, ted yv urovni TTL po pripojeni diody mi pouze sviti, neblika…kdyz odpojim propojeni mezi RXD a TXD tak pin 11 nesviti a pin 12 sviti…vse pri 300 baud

Po přepolovani diod mi nesviti vubec…

Chci Vám pro dnešek tímto poděkovat za pomoc, opravdu moc a moc, za Váš čas i trpelivsot, zitra nakoupim nove soucastky, necham si udelat plosny spoj dle jednoho planku a koupim si nove kontaktni pole,…

pak vse zkusim znovu …a urcite dam vedet, jak todopadlo…

kdo vi, jestli ty soucastky po peti dnech chodi jak maji…

pratele, dekuji VAM…dam Vam vedet

V Bascomu příkaz <PRINT “START”> vyšle znaky START a nakonec CR LF.

Příkaz čeká až přijde znak na uart a pak ho zapíše do bajtové proměnné c.

Příkaz vyšle přes uart hodnotu proměnné c.

Takže program pro opakování znaku vypadá takto:

[code] Print “START”

Do 'hlavní smyčka
Inputbin c 'přijmi znak
Printbin c 'a pošli ho zpět
Loop 'konec smyčky

End
[/code]

Našemu kolegovi se “START” zobrazí správně, takže směr AVR => PC funguje.

Ale opakování znaků nefunguje, takže směr PC => AVR nejde.

V tom programu, který jsem poslal platí jen kód po první “End”.
Zbytek je zakomentovaný znakama
'( - začátek komentáře
') - konec
Zapomněl jsem to vymazat.

Dobrý den přátelé,

předev všeho Vám chci poděkovat za Vaše rady a podporu, jelikož vše vyústilo do dnešního dne, kdy se vše rozjelo…

k dostani byl pouze MAX232A a k tomu jsem nakoupil patricne soucastky, stejne jako novou megu…
Přišel jsem domů a začal kutit podle:

praveendb.files.wordpress.com/2009/05/uart3.jpg

Přátelé, po prvním spojení se vše rozjelo…a co víc…
Funguje to i s původní megou a co víc…je to paráda…

děkuji Vám ještě jednou tímto a budu velmi rád, pokud informace v tomto vlákně někomu dále pomohou, jelikož mě za tu dobu velmi pomohly v tom, že jsem v tématu MAX232 pružnější minimálně ve smyslu kontroly jeho funkčnosti a co se týče bascomu, poznal jsem toliko nastavení seriového portu, ze opravdu to, co je napsano zde kazdemu postaci …

děkuji Vám a přeji krásný den všem…

PS: přesto Vás prosím o radu… dal jsem atmegu8 do programátoru s tím, že ji nastavim fusebity tak, abych mohl pouzit 16MHz krystal…

nastavil jsem , zaskrtl v ponyprog 2000 tedy pouze: CKOPT, dal jsem WRITE a ejhle… napsalo mi to, jako ze nemuze se zapisovat, ze device je neznamy…tak jsem chtel precist fusebity a ani to nejde…megu mam tedy odrovnanou… předtím jsem zkoušel nastavit pro externi krystal 16MHz toto: CKOPT BOOTSZ1 BOOTSZ0 a ejhle to same a ještě předtím jsem zkoušel odskrknout všechno = nic nebylo zaškrtnuto a ejhle to same… dnes tedy jsem utratil 3atmegy8 * 35Kč= 135Kč

Mám ještě 2 megy, prosím Vás proto o radu, co delam spatne? Uz mam prichystany 16Mhz oscilator, 22pF kondenzatory, jen ta mega v obvodu chybi…chci se dostat timto na 19200 baud

děkuji moc

:arrow_right: administrator: přiloženy externí soubory

Myslím, že ty Atmegy nejsou ztracené.

Nevím, jaký máte programátor, ale typuji, že v něm nemáte krystal.
Procesor jednou naprogramovaný na krystalový oscilátor už bez krystalu nebude s Ponyprogem komunikovat.

Nastavení fusebitů (nic nezatrženo) by mělo chodit.
Ale doporučuje se pro krystal > 8 MHz zatrhnout CKOPT.

A vedeli by ste specifikovat co by tu napisane malo niekomu pomoct? Ved ste vobec neuviedli v com bol problem!

Bolo tu uvedenych niekolko doporuceni a postupnost krokov pre odhalenie problemu. Na vsetky kroky bola Vasa reakcia negativna. Tak co by malo komu ako z tejto diskusie pomoct?!

Budte prosim aspon tak seriozny, ze popisete pricinu a riesenie problemu. Lebo z toho, co ste napisali pre mna osobne vyplyva, ze riesenie je v nakupe novych suciastok.
Nehnevajte sa na mna, ale to je pre mna uplne nezrozumitelne.

Okrem toho, bacha na to, v PonyProgu je zaskrtnuta poistka po naprogramovani nastavena na log.0 a nie na log.1 ako si mnohi myslia. Vznikaju z toho fatalne chyby typu preprogramovanie procesora na pouzitie externeho generatora, miesto externeho Xtalu a tak podobne.

K tomu co mi pomohlo s ATMEGA8 a MAX232…
Sám nevím přesně, zkrátka programem to nebylo. Vše bylo použitím součástek a verze MAX232. Ve výše uvedeném linku je obrázek, dle kterého se mi vše rozjelo napoprvé. Hodnoty napětí na každém pinu jsem zkontroloval dle předchozích rad v tomto vlákně a jakmile jsem se utvrdil v ejjich správnou funkčnost, , propojil jsem RXD a TXD a zapnul terminál…znaky se mi vracely…jakmile i to fungovalo, připojil jsem to k ATMEGA8 a vše jelo napoprvé…

Požíval jsem tedy MAX232A spolu s 10 mikroF kondenzátory, což mi fungovalo…

předtím jsem používal 1mikroF a MAX232N a MAX232

Cokoliv chcete a potřebujeet vědět o detailnějších krocích …klidně pište, odpovím a upřesním…

k tomu programátoru:

Mám tento programátor:

electrid.ic.cz/files/Podklady/Schema.pdf

ten mám přímo napojený na patici, kam dávám atmega8 pro naprogramování prostřednicžvím ponyprog 2000…žádné další součástky tam nemám…

znamená to tedy, že mám na patici připojit oscilátor stejně jako v aplikaci? A mám ho zapojit tak, že se bude dát měnit tento oscilátor, dle potřeby? Na 4Mhz…8…16, atd? To je to co pomůže pro další funkčnost megy, nastavení fusebitu, komunikaci s ponypog a použití externího oscilátoru?

Mám tedy raději používat interní oscilátor nebo můžu tam dát alespoň 4MHz oscilátor externí, abych dostal větší rychlost baud? A ještě otázka… čemu všemu externí oscilátor pomáhá, prosím?

děkuji a zdravím Vás

:arrow_right: administrator: přiloženy externí soubory
avr_isp_prog_ivan_dousa.pdf (11.7 KB)

Ne oscilátor, ale krystal.
Ano při programování musí být zapojen krystal mezi XTAL1 XTAL2 a kondenzátory cca 20pF z XTAL1 a XTAL2 na zem.

Nemusí se měnit, např krystal 8 MHz by měl vyhovět pro programování asi od 3 MHz až do maximální hodnoty, zde 16 MHz.

Je to jen můj názor, ale stačil by vám krystal 8 MHz.
S ním můžete nastavit až 57600 baud.
Větší rychlost asi brzy nebudete potřebovat a s větším kmitočtem jenom roste spotřeba.

Výhodou krystalového oscilátoru proti internímu je větší přesnost a stabilita kmitočtu.
Interní oscilátor má psanou přesnost 1%, krystalový lepší než tisícina procenta.
Interní oscilátor navíc mění kmitočet s teplotou.

Právě UART potřebuje přesný kmitočet (± 2%), takže je zvykem použít krystal.

Ja len doplnim predchadzajuci prispevok o info, ze pre dosiahnutie presnych baudovych rychlosti sa pouzivaju Xtaly s takymi “divnymi” frekvenciami ako 14.7456MHz, 18.432MHz, 11.0592MHz, 7.3728MHz, 3.6864MHz a im podobne. Xtaly s tymito hodnotami su bezn k zohnaniu.

Ale asj s Xtalom 8MHz sa da dosiahnut potrebny rozptyl. Vsetko je uvedene v datasheete k Atmega8 v kapitole

Examples of Baud Rate Setting

Z tabulky vyplyva, ze s 8MHz Xtalom sa uz 57,6kBd neda generovat s toleranciou lepsou ako 2%, ale s Xtalom 7.3728MHz mozete ist i do 230.4kBd s presnostou 0%. Je pravda, ze s takymito Xtalmi sa horsie generuju casove zakladne s krokom 1ms bez priebezneho prepinania predvolby casovaca (s vynimkou 18.432MHz), ale 10ms sa uz da vygenerovat exaktne. Je uz na Vas, co uprednostnite.

Zaroven Vam doporucujem si vzdy na dosticku umiestnit i 6 pinov pre konektor PFL06 (taky cierny pre sivy plochy kablik). alebo uz aky Vam len vyhovuje, aby ste mohli procesor preprogramovat priamov aplikacii a nemuseli ho neustale pri preprogramovavanie vytahovat. Nemusi mu to robit dobre a Vas to zbytocne obera o cas. Priklad prepojenia je napriklad v aplikacnej poznamke AVR910 (staci zadat do googlu).

Pytali ste sa, na co je dobre pouzit externy oscilator (nie Xtal). To je dobre na to, ak chcete mat ATmegu presne casovanu a chcete usetrit jeden pin procesora. Alebo potrebujete pouzit jeden zdroj hodin pre presne synchronizovanie viacerych suciastok (mozu to byt procesory) na doske.

Martin a všichni ostatní…

děkuji Vám mockrát za rady, včera v noci jsem napájel podle rad k programátoru patici, kde můžu vkládat různé kondenzátory a různé krystaly a všechny ATMEGA8, které jsem takto bez krystalu nemohl po změně fusebitů přečíst, tak všechny jsem hned napoprvé přečetl a mohu je používat…tím chci vyjádřit fakt, že programátor s přídavným krystalem funguje a krásně se dá používat. Měli jste pravdu…

Děkuji Vám za pomoc.

Následující aplikaci udělám Martine podle Tvé rady = přímo programovatelnou v této aplikaci. Věřím, že to ušetří čas…a za tabulky, kondíky a krystaly děkuju…