forum.mcontrollers.com - hlavní stránka forum.mcontrollers.com - fórum

 

.: fórum - hlavní stránka :.
Technology Stronghold by Rudolf Vesely
How to build Microsoft System Center hosted cloud series
FAQFAQ HledatHledat Seznam uživatelůSeznam uživatelů Uživatelské skupinyUživatelské skupiny RegistraceRegistrace
ProfilProfil StatistikaStatistika Soukromé zprávySoukromé zprávy PřihlášeníPřihlášení

 
Programování AT89S52: zkušební zapojení - MCU nebliká LEDkou
Jdi na stránku 1, 2  Další
 
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> 8051 / 8052
 
Honza S
Profesionál
Profesionál


Založen: 1.3.2013
Příspěvky: 43

PříspěvekZaslal: 13 březen 2013, 7:58    Předmět: Programování AT89S52: zkušební zapojení - MCU nebliká LEDkou Citovat

Zdravím,

koupil jsem si programátor USBasp, který umí komunikovat s AT89S52. Na stránkách dhservisu jsem si stáhl program na blikání LED. HEXa soubor jsem nahrál do procesoru, zapojil přesně podle obrázku (s tím, že jsem použil datashheet pro 40pin MCU) a př připojení napájecího napětí LED pouze jednou lehce blikla a nic se nedělo, tak jsem odpojin napájení a zkontroloval vše okolo, znovu ho přiložil a už ani neblikla. Tak jsem znovu obvod připojil na programátor a nechal načíst flash a program tam byl.
Poradíte mi prosím?

Honza

Arrow administrator: přejmenováno z "Programování AT89S52"
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Panda38
Profesionál
Profesionál


Založen: 18.9.2012
Příspěvky: 398
Bydliště: Praha, Most

PříspěvekZaslal: 13 březen 2013, 10:44    Předmět: Citovat

Tyhle AT nemají moc velkou vybuditelnost výstupu (10 mA), neuvařils výstup velkým proudem?

Zkus LED přepojit na zem pro kontrolu, zda Ti neodešla.

Když se dívám na jejich schéma, moc se mi tam nezdá ten resetovací obvod. Osobně bych tam dal ještě odpor proti zemi. Takhle bych měl obavu, že to zůstává trvale v reset stavu (zbytkový prout elytu to může držet v HIGH).
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
 

 
Honza S
Profesionál
Profesionál


Založen: 1.3.2013
Příspěvky: 43

PříspěvekZaslal: 13 březen 2013, 11:11    Předmět: Citovat

Před diodou je odpor 360 ohm a napájený to mám 5V z USB. Právě že ten reset vubec nechápu. Mimochodem. Když ten kondenzátor mezi + a reset vyndám, tak dioda začne jen svítit. Jsem teď v práci, až přujdu domu, tak ještě připojím mezi reset a zem odpor 1k (bude dostačující? Nevím, jaký proud je dostatečný pro to aby se udržela log.0). Mám tam nechat ještě ten kondenzátor? Nechápu k čemu tam je.

Honza
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Balů
Profesionál
Profesionál


Založen: 29.10.2012
Příspěvky: 708

PříspěvekZaslal: 13 březen 2013, 11:28    Předmět: Citovat

Ten kondenzátor je tam kvůli tomu, aby Ti zresetovat mcu po zapnutí. Na reset MCU používám cca 1u (hodnota není nikterak kritická), ale je třeba mu připojit nějaký odpor proti GND. 1k bude dostačovat. Tady vůbec nejde o proud. Kondík, jak se nabíjí, tak na RST pinu postupně klesá napětí až do log. 0 (tím se odresetuje mcu). Hodnota C a R určuje to, jak dlouho od zapnutí napájení bude reset trvat. Jenže pokud tam není ten odpor, tak nabíjení může trvat (a ve Tvém případě asi trvá) hrozně dlouho. Když ten kondík vyndáš, může to dělat nějaký nepředloženosti, protože se mcu může spustit dřív, než napětí na napájení dosahne potřebné hodnoty ke správnému chodu mcu. Kromě toho, když zůstane viset ve vzduchu, může Ti náhodně mcu resetovat. Tím, že ke kondíku přidáš odpor proti zemi dosahneš toho, že mcu bude držen v resetu jen pár milisekund, což bohatě stačí na náběh napájení a bezpečný chod mcu.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Panda38
Profesionál
Profesionál


Založen: 18.9.2012
Příspěvky: 398
Bydliště: Praha, Most

PříspěvekZaslal: 13 březen 2013, 11:30    Předmět: Citovat

Resetovací vstup vyžaduje, aby se po zapnutí napájení chvíli objevila úroveň HIGH, která procesor resetuje, a pak přešlo na provozní úroveň LOW. Kondezátor tam vstříkne krátký HIGH impuls, kterým procesor resetuje. Když se odpojí, procesor je po zapnutí napájení v náhodném stavu, např. ukazatel instrukcí může běhat kdekoliv v paměti - proto se to může projevit např. tím svitem LED, program někde běhá. Tyto procesory ještě vyžadují aby byl reset správně provedený. Nevím jistě zda procesor má nějaký pulldown odpor aby stáhl reset na LOW, ale je možné že zbytkový proud přes kondenzátor ho je schopný držet v reset stavu (HIGH) a pak by se program nerozběhl. Ten odpor 1K by mohl být dobrý - velikost určuje jen délku reset impulsu a ten stačí docela krátký. Navíc - v tomto zapojení se moc nepočítá s vybitím resetovacího kondenzátoru před opakovaným zapnutím napájení (i tomu by mohl ten odpor pomoct).

...Jo, Balů už to mezitím také popsal.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
 

 
Honza S
Profesionál
Profesionál


Založen: 1.3.2013
Příspěvky: 43

PříspěvekZaslal: 13 březen 2013, 12:03    Předmět: Citovat

Hrozně moc děkuji za rady. Doma vyzkouším s tím odporem a následně dám vědět. Ještě bych chtěl vědět, zda tento program:

:10000000D292B2927BA77AAB7910D9FEDAFADBF6FC
:0200100080F07E
:00000001FF

má vypadat v paměti takto:

D292 B292 7BA7 7AAB 7910 D9FE DAFA DBF6
80F0 FFFF FFFF FFFF FFFF FFFF FFFF FFFF
FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF
FFFF .... a to pokračuje až do konce

Tohle se uloží do paměti procesoru když mu načtu hex.
Program píšu v assembleru a potřeboval bych nějaký kompilátor do hex pro tento procesor. Zatím používám ten ze stránek dhservisu a jelikož mám 64bit systém, tak musím přes dos box. Zkoušel jsem i 8051IDE, ale pořám mi hází nějaké chyby a nechápu ho.

Honza
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Panda38
Profesionál
Profesionál


Založen: 18.9.2012
Příspěvky: 398
Bydliště: Praha, Most

PříspěvekZaslal: 13 březen 2013, 12:10    Předmět: Citovat

Obsah paměti vypadá v pořádku.

Dobrý překladač pro tyhle MCU je Keil C51, pro malé programy stačí free verze. ... aha, Ty chceš assembler, to je C. Sice má inline assembler, ale asi potřebuješ spíš něco jiného.

Ale dnes je už škoda se zabývat těmito procesory (jestli to není z důvodu jejich velkých zásob). Vhodnější jsou např. ATmegy, které jsou dost levné, mají větší vybavení a dají se proto už dobře programovat v C.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
 

 
Honza S
Profesionál
Profesionál


Založen: 1.3.2013
Příspěvky: 43

PříspěvekZaslal: 13 březen 2013, 12:48    Předmět: Citovat

Ještě jsem proletěl google a našel jsem tohle. Pro zkoušku jsem mu podstrčil jeden program v assembleru, který mám i v hex abych ověřil správnost a vypadá to, že to funguje bezvadně Smile
C neovládám a tyhle staré procesory mám nějaké doma. Mám i AT89S4051 což by pro aplikaci kterou potřebuju udělat dostačovalo, ale bohužel na ně nemám programátor, tak použiju ty větší. Mám i jeden PLCC44, ale na zkoušení používám klasický pouzdro. Ten programátor do USB který mám umí jen S51 a S52 a ATMega.

Honza
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Balů
Profesionál
Profesionál


Založen: 29.10.2012
Příspěvky: 708

PříspěvekZaslal: 13 březen 2013, 13:37    Předmět: Citovat

Používal jsem tenhle uCpuEdit a Asem51. Je to někde z Internetu. Ani jedno nemusíš instalovat. V uCpuEdit v menu Soubor->Nastavení v záložce ASEM-51 nastavíš cestu k souboru ASEMW.EXE a můžeš vesele programovat.
A když si v položce Zvýraznění vybereš tu svojí skupinu MCU, tak máš téměř dokonalý nástroj.



asem5113.zip
 Komentář:

Stáhnout
 Soubor:  asem5113.zip
 Velikost:  598.98 kB
 Staženo:  376 krát


uCpuEdit.zip
 Komentář:

Stáhnout
 Soubor:  uCpuEdit.zip
 Velikost:  759.55 kB
 Staženo:  349 krát

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Honza S
Profesionál
Profesionál


Založen: 1.3.2013
Příspěvky: 43

PříspěvekZaslal: 13 březen 2013, 13:58    Předmět: Citovat

To je mazec, moc díky. Zrovna jsem to vyzkoušel v práci a bezvadný. Teď to zkouším v práci pod win XP, tak snad si s tím doma poradí win7 64 bit. Nasimuloval jsem mu tam chybu a je fajn že rovnou ukáže řádek na kterém je.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Honza S
Profesionál
Profesionál


Založen: 1.3.2013
Příspěvky: 43

PříspěvekZaslal: 14 březen 2013, 11:56    Předmět: Citovat

Zdravím. Včera už jsem se k tomu nedostal. Ještě jsem dneska ráno studoval vlákna na tomto foru a objevil jsem článek, jak někomu také nefungoval procesor a objevil jsem, že pin 31 musí být připojen k napájecímu napětí aby pracoval z interní pamětí. Tudíž jsem prostudoval datasheet a našel tuto větu, která to potvrzuje (pin 31=EA)

EA should be strapped to VCC for internal program executions.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Honza S
Profesionál
Profesionál


Založen: 1.3.2013
Příspěvky: 43

PříspěvekZaslal: 14 březen 2013, 23:00    Předmět: Citovat

Tak jsem to dnes vyzkoušel. Ten odpor mezi zemí a resetem u kondenzátoru opravdu mbýt nemusí. Problém byl v tom, že jsem neměl napájení na tom pinu 31. začalo to fungovat. Mám ohromnou radost. Dokonce když píšu program v uCPuEdit a mám připojený programátor s procesorem a změním cokoliv v programu a přeložím, tak se to ihned projeví. Moc díky za pomoc. Ještě musím prostudovat, proč když zapíšu do portu 0 číslo 0010000 tak všechny ledky svítí, kromě té jedné. Taky jsem myslel, že když udělám tuto instrukci:
w1: mov r0,#0
djnz r0,$
djnz r1,w1
tak to je 250 + 250 instrukcí, přičemž jedna trvá 2us (12Mhz krystal), tak by to mělo být 1000us což je 0,001 sekunda a přitom je to bliknutí, které je dost zřetelné.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Panda38
Profesionál
Profesionál


Založen: 18.9.2012
Příspěvky: 398
Bydliště: Praha, Most

PříspěvekZaslal: 14 březen 2013, 23:24    Předmět: Citovat

Ne 250 + 250 instrukcí, ale přibližně 256*256.

LEDky jsou zapojené na +5V, proto se rozsvítí uzemněním, tedy hodnotou "0".
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
 

 
Honza S
Profesionál
Profesionál


Založen: 1.3.2013
Příspěvky: 43

PříspěvekZaslal: 15 březen 2013, 8:30    Předmět: Citovat

To už by vycházelo přibližně na 0,13 sekundy což by mohlo být. Díky za vysvětlení.

Dal jsem místo mov p0,#00010000b tohle 11101111 a fungovalo to. Díky za vysvětlení.

Je super, že to co mám na papíře, tak si mužu vyzkoušet v reálu. Do teď jsem si myslel, že když mám jednoduchý program

setb p1.1
end

tak že se mi ta LEDka rozsvítí a zustane svítit, ale když program dorazí na "end" tak LEDka zhasne. Musel jsem to udělat takto:

start: setb p1.1
jmp start
end

a už to fungovalo
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Panda38
Profesionál
Profesionál


Založen: 18.9.2012
Příspěvky: 398
Bydliště: Praha, Most

PříspěvekZaslal: 15 březen 2013, 11:00    Předmět: Citovat

"end" (jestli se jedná o klasický assembler) znamená jen označení konce zdrojáku pro překladač. Procesor neví že tam je konec, neumí se zastavit a pokračuje dalšími instrukcemi (což bude zřejmě 0xff, nevím z hlavy jaké instrukci to odpovídá). Proto program musí vždy obsahovat nekonečnou smyčku, ve které se procesor stále pohybuje.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
 

Zobrazit příspěvky z předchozích:   
Zobrazit předchozí téma :: Zobrazit následující téma  
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> 8051 / 8052 Časy uváděny v GMT + 2 hodiny
Jdi na stránku 1, 2  Další
 
Strana 1 z 2
Přejdi na:  
Můžete přidat nové téma do tohoto fóra.
Můžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Můžete k příspěvkům připojovat soubory
Můžete stahovat a prohlížet přiložené soubory
 



Num Lock Holder - app to hold Numlock
Copyright © 2017 Rudolf Veselý, mcontrollers.com.
Je zakázáno používat části tohoto webu bez souhlasu autora. || Powered by phpBB © 2001, 2002 phpBB Group - with RedSquare DoubleJ(Jan Jaap)