AT89S52
Moderátori: psichac, Moderátori
-
- Ultimate člen
- Príspevky: 2555
- Dátum registrácie: 20 Júl 2010, 00:00
- Bydlisko: okolie KE
- Vek: 27
AT89S52
Dobrý deň,
Mám zapojené ISP NE049 cez COM1 port do počítača a taktiež do čipu AT89S52. ISP mám napojené do prúdu cez 300mA adaptér nastavený na 12V.Prepojil som piny MISO,MOSI,SCK, RESET na RST(pin 9), prúd na VCC a j na VPP(piny 40 a 31), GND na GND(pin 20) . Medzi XTAL1(pin 19) a XTAL2(pin 18) mám kryštál, označený ako YIC12.000A0 , a od oboch vývodov 33pF kondenzátor smerom na zem.Vývod LED na ISP som nedal, pretože neviem, kde by mal ísť.
Keď zapnem ovládací program pre ISP a dam načítať typ čipu, píše, že to nevie. Keď ručne vyberiem AT89S52 a dám načítať Flash do súboru, tak tiež len BŁAD (error).
Nevedel by mi niekto poradiť, kde môže byť chyba ? Všetko, čo som objavil som už opravil a nefunguje to. Taktiež vôbec mi nesvietia LEDky na ISP, ale tam si niesom istý polaritou, stranu so zárezom som dal ako anódu.
Mám zapojené ISP NE049 cez COM1 port do počítača a taktiež do čipu AT89S52. ISP mám napojené do prúdu cez 300mA adaptér nastavený na 12V.Prepojil som piny MISO,MOSI,SCK, RESET na RST(pin 9), prúd na VCC a j na VPP(piny 40 a 31), GND na GND(pin 20) . Medzi XTAL1(pin 19) a XTAL2(pin 18) mám kryštál, označený ako YIC12.000A0 , a od oboch vývodov 33pF kondenzátor smerom na zem.Vývod LED na ISP som nedal, pretože neviem, kde by mal ísť.
Keď zapnem ovládací program pre ISP a dam načítať typ čipu, píše, že to nevie. Keď ručne vyberiem AT89S52 a dám načítať Flash do súboru, tak tiež len BŁAD (error).
Nevedel by mi niekto poradiť, kde môže byť chyba ? Všetko, čo som objavil som už opravil a nefunguje to. Taktiež vôbec mi nesvietia LEDky na ISP, ale tam si niesom istý polaritou, stranu so zárezom som dal ako anódu.
0
-
- Ultimate člen
- Príspevky: 2555
- Dátum registrácie: 20 Júl 2010, 00:00
- Bydlisko: okolie KE
- Vek: 27
Re: AT89S52
Všetky štyri vodiče na jeden pin?maskrtnik01 napísal:Prepojil som piny MISO,MOSI,SCK, RESET na RST(pin 9)
Ono to má ísť predsa takto
MOSI 6
MISO 7
SCK 8
RST 9
enaxy: áno, je.
-
- Ultimate člen
- Príspevky: 2555
- Dátum registrácie: 20 Júl 2010, 00:00
- Bydlisko: okolie KE
- Vek: 27
1.Opakujem:Na PCB programátora je 7805 a preto je to priamo robené na 12V.
2.
Samozrejme som to nedal všetko na 9. pin. Preto to bolo oddelené čiarkou.
Napojil som to presne tak ako boli piny označené v datasheete a ako to píšete.
Myslel som, že mi niekto fakt pomôže, počítal som aj s tým, že ma pokarháte za neskúsenosť, ale ani by ma nenapadlo, že si niekto pomyslí tieto blbosti, ako napr. že som dal priamo na čip 12V.
2.
Samozrejme som to nedal všetko na 9. pin. Preto to bolo oddelené čiarkou.
Napojil som to presne tak ako boli piny označené v datasheete a ako to píšete.
Myslel som, že mi niekto fakt pomôže, počítal som aj s tým, že ma pokarháte za neskúsenosť, ale ani by ma nenapadlo, že si niekto pomyslí tieto blbosti, ako napr. že som dal priamo na čip 12V.
0
-
- Ultimate člen
- Príspevky: 2555
- Dátum registrácie: 20 Júl 2010, 00:00
- Bydlisko: okolie KE
- Vek: 27
AT89S52
No teda tak je to tým jumperom.Teraz to ide.Ale v dokumentácií k programátoru písali, že jumper netreba, ak to napájam z toho 12V konektora.
Citujem dokumentáciu, Z3 je ten 12V konektor, Z2 je konektor ku čipu, Z4 je jumper:
Napájanie stavebnice môžeme zabezpečiť dvoma spôsobmi. V prvom prípade pripojíme napätie cez konektor Z3, pričom napájacie napätie 5V zabezpečí stabilizátor 7805. V tomto prípade "jumper" na konektore Z4 nepripájame.
Manik: Neprogramoval som doteraz nič, tzn. ani s iným programátorom, ani s týmto.
Citujem dokumentáciu, Z3 je ten 12V konektor, Z2 je konektor ku čipu, Z4 je jumper:
Napájanie stavebnice môžeme zabezpečiť dvoma spôsobmi. V prvom prípade pripojíme napätie cez konektor Z3, pričom napájacie napätie 5V zabezpečí stabilizátor 7805. V tomto prípade "jumper" na konektore Z4 nepripájame.
Manik: Neprogramoval som doteraz nič, tzn. ani s iným programátorom, ani s týmto.
0
Naposledy upravil/-a maskrtnik01 v 20 Júl 2010, 18:27, upravené celkom 1 krát.
-
- Ultimate člen
- Príspevky: 2555
- Dátum registrácie: 20 Júl 2010, 00:00
- Bydlisko: okolie KE
- Vek: 27
-
- Ultimate člen
- Príspevky: 2555
- Dátum registrácie: 20 Júl 2010, 00:00
- Bydlisko: okolie KE
- Vek: 27
Zatiaľ ďakujem, ešte by som potreboval poradiť s programom.
Chcel by som z toho spraviť hodinky.
Ako prvé ma napadlo spraviť si návestia AM1,AM10,AH1,AH10,AD a pod, každé by pridalo určitý časový diel, s tým, že ak je v R0 a R1 uložené, že je 23:59, tak aby to prebublalo z AM1(ďalšia minúta) cez všetky až na AD(nový deň), ktoré by bolo zároveň úvodnou inicializáciou.
Ako zistiť, že treba mi nulovať a skočiť na iné, ma napadá, ale trebalo by mi niečo v zmysle skoč ak sa rovnajú. V inštrukčnej sade je ale iba CJNE(porovnaj, skoč ak sa nerovnajú). Žiadne CMP ani JE, ktorým by som to chcel spraviť. Napadá niekoho iné riešenie, napríklad cez bit prenosu ?
Ešte s tým že port 0 piny 0-3 bude čip 4511 a 7segmentovka a port 0 piny 4-7 bude ďalšie 4511, lenže to je dekóder pre 16kovú sústavu na 7segm. Na hodinách pre ľudí to musí byť desiatkovo.A ako nechať nastaviť bit prenosu ak tam je napr. 10010000, t.j. na 7segm. 09 ?
Taktiež časovanie. V jednom z programov priložených k mojmu(stiahol som ho, nie nieje mojej výroby) kompilátoru je uvedený príklad, kde je definované TIME EQU 8.
Následne dajú do R0 hodnotu tej konštanty, #TIME a pomocou DJNZ čakajú na nulu, následne to vyskočí a vraj prešla sekunda.
To potom keď si dám TIME EQU 480 a to do napr. R3 tak to naozaj za 480 vykonaní DJNZ prejde minúta ? Pri 12Mhz kryštáli sa mi to číslo zdá byť primalé.Prípadne ako čakať minútu a pritom kontrolovať ešte stav tlačidiel ?
Chcel by som z toho spraviť hodinky.
Ako prvé ma napadlo spraviť si návestia AM1,AM10,AH1,AH10,AD a pod, každé by pridalo určitý časový diel, s tým, že ak je v R0 a R1 uložené, že je 23:59, tak aby to prebublalo z AM1(ďalšia minúta) cez všetky až na AD(nový deň), ktoré by bolo zároveň úvodnou inicializáciou.
Ako zistiť, že treba mi nulovať a skočiť na iné, ma napadá, ale trebalo by mi niečo v zmysle skoč ak sa rovnajú. V inštrukčnej sade je ale iba CJNE(porovnaj, skoč ak sa nerovnajú). Žiadne CMP ani JE, ktorým by som to chcel spraviť. Napadá niekoho iné riešenie, napríklad cez bit prenosu ?
Ešte s tým že port 0 piny 0-3 bude čip 4511 a 7segmentovka a port 0 piny 4-7 bude ďalšie 4511, lenže to je dekóder pre 16kovú sústavu na 7segm. Na hodinách pre ľudí to musí byť desiatkovo.A ako nechať nastaviť bit prenosu ak tam je napr. 10010000, t.j. na 7segm. 09 ?
Taktiež časovanie. V jednom z programov priložených k mojmu(stiahol som ho, nie nieje mojej výroby) kompilátoru je uvedený príklad, kde je definované TIME EQU 8.
Následne dajú do R0 hodnotu tej konštanty, #TIME a pomocou DJNZ čakajú na nulu, následne to vyskočí a vraj prešla sekunda.
To potom keď si dám TIME EQU 480 a to do napr. R3 tak to naozaj za 480 vykonaní DJNZ prejde minúta ? Pri 12Mhz kryštáli sa mi to číslo zdá byť primalé.Prípadne ako čakať minútu a pritom kontrolovať ešte stav tlačidiel ?
0
Ak ti mozem poradit a ak nechces pisat program vyslovne v assembleri, tak vyskusaj programovanie v jazyku C. Pre procesory c51(52) a ich klony odporucam KEIL uVision, ktory si mozes stiahnut zdarma a zdarma pouzivat do dlzky programu tusim 2kB.
Pre tvoju aplikaciu je vhodne vyuzit jeden z casovacov procesora, ktory bude v definovanych intervaloch vyvolavat prerusenie (napr. kazde 2ms). V obsluhe prerusenia budes spocitavat prerusenia, kym nedostanes celu sekundu, no a ked uz mas sekundu, mozes lahko pocitat minuty a hodiny. V hlavnej slucke uz budes iba posielat cas na segmenty, napriklad zakazdym ked uplynie sekunda.
tu som narychlo (ilustracne) potlapal obsluhu prerusenia a hlavnu slucku v C:
#include <regx52.h>
unsigned char PocetPreruseni;
unsigned char Sekunda;
unsigned char Minuta;
unsigned char Hodina;
void Int_Casovac2( void ) interrupt 5
{
if ( ++PocetPreruseni >= 20 ) {
PocetPreruseni = 0;
Sekunda++;
}
if ( Sekunda >= 60 ) {
Sekunda = 0;
Minuta++;
}
if ( Minuta >= 60 ) {
Minuta = 0;
Hodina++;
}
if ( Hodina >= 24 )
Hodina = 0;
}
void ZobrazCas( void )
{
// funkcia pre vypis casu na segmentovky
return;
}
void main( void )
{
unsigned char StaraSekunda = 0;
Sekunda = 0;
Minuta = 0;
Hodina = 0;
T2MOD = 0x00; /* T2OE=0;DCEN=0; */
EXF2=0; /* reset flag */
TCLK=0;RCLK=0; /* disable baud rate generator */
EXEN2=0; /* ignore events on T2EX */
TH2=0x3C; /* Init msb_value */
TL2=0xB0; /* Init lsb_value */
RCAP2H=0x3C;/* reload msb_value */
RCAP2L=0xB0;/* reload lsb_value */
C_T2=0; /* timer mode */
CP_RL2=0; /* reload mode */
EA=1; /* interupt enable */
ET2=1; /* enable timer2 interrupt */
TR2=1; /* timer2 run */
while( 1 ) {
if ( StaraSekunda != Sekunda ) {
StaraSekunda = Sekunda;
ZobrazCas();
}
}
}
Pre tvoju aplikaciu je vhodne vyuzit jeden z casovacov procesora, ktory bude v definovanych intervaloch vyvolavat prerusenie (napr. kazde 2ms). V obsluhe prerusenia budes spocitavat prerusenia, kym nedostanes celu sekundu, no a ked uz mas sekundu, mozes lahko pocitat minuty a hodiny. V hlavnej slucke uz budes iba posielat cas na segmenty, napriklad zakazdym ked uplynie sekunda.
tu som narychlo (ilustracne) potlapal obsluhu prerusenia a hlavnu slucku v C:
#include <regx52.h>
unsigned char PocetPreruseni;
unsigned char Sekunda;
unsigned char Minuta;
unsigned char Hodina;
void Int_Casovac2( void ) interrupt 5
{
if ( ++PocetPreruseni >= 20 ) {
PocetPreruseni = 0;
Sekunda++;
}
if ( Sekunda >= 60 ) {
Sekunda = 0;
Minuta++;
}
if ( Minuta >= 60 ) {
Minuta = 0;
Hodina++;
}
if ( Hodina >= 24 )
Hodina = 0;
}
void ZobrazCas( void )
{
// funkcia pre vypis casu na segmentovky
return;
}
void main( void )
{
unsigned char StaraSekunda = 0;
Sekunda = 0;
Minuta = 0;
Hodina = 0;
T2MOD = 0x00; /* T2OE=0;DCEN=0; */
EXF2=0; /* reset flag */
TCLK=0;RCLK=0; /* disable baud rate generator */
EXEN2=0; /* ignore events on T2EX */
TH2=0x3C; /* Init msb_value */
TL2=0xB0; /* Init lsb_value */
RCAP2H=0x3C;/* reload msb_value */
RCAP2L=0xB0;/* reload lsb_value */
C_T2=0; /* timer mode */
CP_RL2=0; /* reload mode */
EA=1; /* interupt enable */
ET2=1; /* enable timer2 interrupt */
TR2=1; /* timer2 run */
while( 1 ) {
if ( StaraSekunda != Sekunda ) {
StaraSekunda = Sekunda;
ZobrazCas();
}
}
}
- Prílohy
-
- main.c
- (1.5 KiB) 65 stiahnutí
0
Naposledy upravil/-a kizmoo v 29 Júl 2010, 16:30, upravené celkom 5 krát.
-
- Ultimate člen
- Príspevky: 2555
- Dátum registrácie: 20 Júl 2010, 00:00
- Bydlisko: okolie KE
- Vek: 27
Trochu som upravil program, bude sa pouzivat 16 bitovy Timer 2 v autoreload mode. Ak som spravne vypocital reload hodnotu pre 12Mhz tak by mal vyvolat prerusenie kazdych 50ms.
Program bezi tak, ze sa na zaciatku spusti funkcia main, zaciatok funkcie nakonfiguruje timer a povoli prerusenie, tato cast programu sa vykona iba raz po zapnuti, pretoze program uviazne v nekonecnom cykle "while(1)". Kedze je povoleny timer a prerusenie, tak sa bude kazdych 50ms prerusovat nekonecny cyklus prerusenim od timera. Prerusenie nesposobi ukoncenie programu, ten si iba odskoci vykonat obsluhu a pokracuje dalej v cykleni.
Program bezi tak, ze sa na zaciatku spusti funkcia main, zaciatok funkcie nakonfiguruje timer a povoli prerusenie, tato cast programu sa vykona iba raz po zapnuti, pretoze program uviazne v nekonecnom cykle "while(1)". Kedze je povoleny timer a prerusenie, tak sa bude kazdych 50ms prerusovat nekonecny cyklus prerusenim od timera. Prerusenie nesposobi ukoncenie programu, ten si iba odskoci vykonat obsluhu a pokracuje dalej v cykleni.
0
-
- Ultimate člen
- Príspevky: 2555
- Dátum registrácie: 20 Júl 2010, 00:00
- Bydlisko: okolie KE
- Vek: 27
AT89S52
Tak teraz už to mám skompilované, ale čo z toho je pre čip ? Nikde nie je nič s príponou hex je tam bez prípony, .lnp, .M51, .Opt, .plg, .Uv2, .Bak, .c, .LST a .OBJ .
A okrem toho, predtým som už chcel z toho spraviť niečo iné, dal som tam program, nešlo to a čo je horšie, od vtedy programátor vôbec nevie čo za čip tam mám. Dá sa z toho vyhrabať, alebo treba úplne nový čip?
A okrem toho, predtým som už chcel z toho spraviť niečo iné, dal som tam program, nešlo to a čo je horšie, od vtedy programátor vôbec nevie čo za čip tam mám. Dá sa z toho vyhrabať, alebo treba úplne nový čip?
0