Vizitator fantomass Postat August 4, 2009 Partajează Postat August 4, 2009 Salut, mi-am facut un o placa integrata pt atmel(atmega128) si un programator: http://www.olimex.com/dev/images/avr-pg1b-sch.gif La un moment dat dupa cateva scrieri consecutive(in timp ce testam un program) am vrut sa ii setez oscilatorul cu cristal extern din Security Bits din programatorul PonyProg. Am setat CKSEL3 pe 1, CKSEL2 pe 0, CKSEL1 pe 1, CKSEL0 pe 0. Am scris bitii, ia scris cu succes, dupa care a inceput sa se comporte ciudat, de ex el trebuia sa faca portul B high si low o data la o secunda, dar el facea cumva aleator, pt ca numai o secunda nu era aia. Dupa ce am mai incercat o scriere a mers si dupa care inca un si nu a mai mers si mi-a dat "device missing -24". Am incercat sa ii dau si erase si acelasi raspuns("device missing -24"). Se poate bloca controlerul(memoria) fara sa il mai vada programatorul, la scriere sau citire, sau sa nu il mai vada deloc? Daca s-a blocat se poate debloca? Sau se poate sa se fi ars? Mentionez ca daca alimentez controlerul fara ca el sa fie conectat la pc(adica prin cablu serial prin programator) portul B este tot timpul high(ultima oara cand l-am programat), iar daca conectez programatorul la controler portul B se face low. Si inca o problema referitoare la cod scris in avrStudio in c: Codul : //#define F_CPU 16000000UL // 16 MHz //#define F_CPU 16000000UL // (2)#include <avr/io.h>#include <util/delay.h>int main( void ){ int nr = 1000; DDRB = 0xff; while(1){ if(nr == 4000) nr = 0; PORTB = 0xff; _delay_ms(nr); PORTB = 0x00; _delay_ms(nr); nr = nr + 100; // (1) } return 1;} Daca poate sa imi spuna cineva daca codul de mai sus este bun. Eu am vrut ca sa tot maresc timpul in care becurile stau aprinse si inchise. Dar nu imi merge, imi statea tot timpul pe high, iar daca scoteam nr = nr + 100;(1) functiona ca un circuti basculat bistabil. Iar daca vroiam sa setez oscilatorul din cod #define F_CPU 16000000UL (2) facea la fel, adica statea tot timpul pe high(cu programul care mergea, adica fara nr = nr + 10) Poate s-a m-ai confruntat cineva cu aceasta problema. Multumesc anticipat. Link spre comentariu
bogdan_ Postat August 4, 2009 Partajează Postat August 4, 2009 dupa cum spui tu s-ar parea ca nu iti merge oscilatorul bine. Verifica ca ai setat oscilator extern cu cristal si nu cu rc, asigura-te ca merge ok oscilatorul...vezi lipituri etc. Link spre comentariu
Vizitator fantomass Postat August 4, 2009 Partajează Postat August 4, 2009 O sa ma uit, eu m-am gandit ca sa scot atmega de pe placa, adica sa nu il mai conectez la oscilator si sa il programez asa. Nu cred ca am setat bine oscilatorul extern, dar asa zicea in cartea lui: Device Clocking Option | CKSEL3..0(1) External Crystal/Ceramic Resonator | 1111 - 1010 External Low-frequency Crystal | 1001 External RC Oscillator | 1000 - 0101 Calibrated Internal RC Oscillator | 0100 - 0001 External Clock | 0000 Eu am setat 1010. Poate trebuia setat 0000. . Si din cauza asta(faza cu cristalul) sa nu imi mai vada atmelul, ca poate nu l-am setat eu bine? Link spre comentariu
bogdan_ Postat August 4, 2009 Partajează Postat August 4, 2009 stiu ca pare stupida intrebarea, dar ai oscilator da? quartz si condensatoare? functie de cum modifici fuse-urile trebuie sa ai tipul ala de oscilator montat pentru a putea programa microcontrollerul. Link spre comentariu
Vizitator fantomass Postat August 4, 2009 Partajează Postat August 4, 2009 am si oscilator si condensatoare de 22 pf. Dar acum nu-l mai vede si scurt nu am facut sigur pt ca nu aveam cum. Cred ca din cauza asta s-a stricat, daca s-a stricat, s-au s-a blocat.P.S.:Am scos atmelul de pe placa si am unit cu fire toti pinii care trebuiau de data asta fara oscilatorul extern, si portul B nu a mai fost facut high, dar nici nu il puteam programa.Cand l-am pus loc pe placa, portul B a fost facut high. Nu stiu ce sa fac. Link spre comentariu
deep-blue Postat August 6, 2009 Partajează Postat August 6, 2009 Pentru avr-gcc ai putea incerca ceva de genul: #ifndef __AVR_ATmega128__ #define __AVR_ATmega128__#endif#ifndef F_CPU #define F_CPU 16000000UL#endifla inceputul codului, inainte de a include orice. Iar in Makefile, sau la optiunile de compilare (atat la compilator cat si la linker) -mmcu=atmega128 Mi-am batut si eu caput candva ca-mi compila codul pentru alt procesor si cand programam hex-ul imi dadea vodoo, de aia il dadacesc acum oriunde pot. Ce compilator si ce optiuni de compilare ai folosit ? Eu am mai patit-o si cu parametrii de optimizare a codului -O2 si -O3. Cat despre CKSEL incearca si cu 1111. Din ce ai descris acolo (ca portul se face high cand il pui in montaj) se pare ca procesorul traieste. Link spre comentariu
Vizitator fantomass Postat August 7, 2009 Partajează Postat August 7, 2009 el traieste, dar numai ca nu il vede programatorul, e blocat si trebuie deblocat.Eu am gasit ceva pe net, daca o sa mearga o sa postez aici.EU am lucrat cu avrstudio 4, iar acolo cand alegeam proiectul imi cerea asm sau c, si dupa aia imi cerea sa spun si tipul controlerului, de aceea nu m-am gandit ca este necesar sa mentionez si tipul controlerului, plus ca am vazut un cod din helpul de la gcc si arata numai F_CPU ..., nu si instructionea #ifndef. Oricum eu o sa im iau alt atmega128, si o sa incerc pe asta. Nu o sa mai setez niciodata oscilatorul extern din pony prog, ci numai din cod. :limb:Dar de ce nu se marea timpul in care ledurile stateau aprinse si stinse, si portul statea tot timpul pe high? Link spre comentariu
deep-blue Postat August 7, 2009 Partajează Postat August 7, 2009 el traieste, dar numai ca nu il vede programatorul, e blocat si trebuie deblocat. Inainte de a declara controllerul blocat ar trebui sa vezi si daca programatorul mai functioneaza cu un alt controller. Se mai poate ca din greseala sa fi pus pe 1 bitul SPIEN din high byte (asta inseamnand ca i-ai dezactivat interfata de programare seriala) ? EU am lucrat cu avrstudio 4, iar acolo cand alegeam proiectul imi cerea asm sau c, si dupa aia imi cerea sa spun si tipul controlerului, de aceea nu m-am gandit ca este necesar sa mentionez si tipul controlerului, plus ca am vazut un cod din helpul de la gcc si arata numai F_CPU ..., Cel mai probabil ca avrstudio s-a ocupat sa puna parametrii de compilare corespunzatori adica tip de procesor si frecventa. Am intrebat de optiunile de compilare gandindu-ma ca ai compilat direct din linia de comanda. Oricum dupa niste experiente neplacute cu niste compilatoare versate am invatat ca nu strica sa verifici parametrii de compilare daca ai indoieli. nu si instructionea #ifndef. "Instructiunea" e de fapt "directiva de compilare". Intradevar, e tot o instructiune, doar ca nu se refera direct la cod ci mai degraba se refera la compilator. Portiunea de cod dintre "#ifndef" si "#endif" este parcursa de catre compilator daca simbolul nu e deja definit (exemplu: daca nu este folosit "#ifndef __AVR_ATmega128__" si acest simbol a fost definit altundeva compilatorul va da o eroare). Deocamdata nu cred ca trebuie sa-ti bati capul cu asa ceva. Oricum eu o sa im iau alt atmega128, si o sa incerc pe asta. Nu o sa mai setez niciodata oscilatorul extern din pony prog, ci numai din cod. Nu stiam ca se pot seta fuse bytes si din cod. De fapt nu cred ca se poate, pentru ca nu intotdeauna poti porni codul fara sa setezi fuse bytes inainte. Dar de ce nu se marea timpul in care ledurile stateau aprinse si stinse, si portul statea tot timpul pe high?Ai cumva listingul asm de la programul generat ? Cred ca e un fisier cu extensia .lss Update: I-am dat o incercare rapida pe o placa cu ATmega162 si merge perfect. Vezi atasament: [attachment=0]atmega.tar.gz[/attachment] Link spre comentariu
Vizitator fantomass Postat August 7, 2009 Partajează Postat August 7, 2009 Sa stii ca problema nu e programarea la mine, eu stiu programare vizuala si la nivel de dos in windows. Eu am vrut sa invat si ceva controlere. Se mai poate ca din greseala sa fi pus pe 1 bitul SPIEN din high byte (asta inseamnand ca i-ai dezactivat interfata de programare seriala) ? Si acum ce fac? Eu am citit pe un forum ca trebuie sa ii aplic un semnal de ceas pe XTAL1, si sa il programez cu un programator de pe portul paralel.http://www.scienceprog.com/wp-content/uploads/AVRISP128/ponyprog_sch.png. "Instructiunea" e de fapt "directiva de compilare". Intradevar, e tot o instructiune, doar ca nu se refera direct la cod ci mai degraba se refera la compilator. Portiunea de cod dintre "#ifndef" si "#endif" este parcursa de catre compilator daca simbolul nu e deja definit (exemplu: daca nu este folosit "#ifndef __AVR_ATmega128__" si acest simbol a fost definit altundeva compilatorul va da o eroare). Deocamdata nu cred ca trebuie sa-ti bati capul cu asa ceva.Stiu la ce se foloseste: #ifndef, #ifdef, #else, #define, #typedef... (astea sunt in windows, eu am banuit ca aici este la fel). Eu foloseam #ifndef cand lucram cu fisiere externe.Update: I-am dat o incercare rapida pe o placa cu ATmega162 si merge perfect. Vezi atasament: Asta e bine. Link spre comentariu
Stefan Postat August 8, 2009 Partajează Postat August 8, 2009 scuze de offtopic dar acum am intrat si eu in lumea AVR si am inceput cu acest programator http://www.lancos.com/e2p/betterSTK200.gif merge foarte bine si e extrem de simplu de construit. e mult mai sigur ca cel de aici http://www.scienceprog.com/wp-content/u ... og_sch.png Link spre comentariu
deep-blue Postat August 8, 2009 Partajează Postat August 8, 2009 @stefan_ro De cand cu calculatoarele mai noi care nu au COM si LPT, orice programator USB e mai bun decat programatoarele "bit-bang" sau paralel. Eu folosesc de ceva vreme USBasp. Ultima versiune de firmware (usbasp.2009-02-28.tar.gz pe ATmega8 si quart de 16 MHz) merge excelent: 7.5 KBytes flash+verify cu avrdude se fac in mai putin de 6 secunde. Acelasi hex se flash-uieste in mai bine de o ora cu un programator bit-bang legat la un adaptor USB-serial. Nici nu vreau sa ma gandesc cat ar dura sa "umpli" un ATmega128.@fantomassDaca SPIEN fuse e problema, ar trebui sa incerci cu un programator JTAG. Asta daca nu cumva a fost dezactivat si JTAGEN. Caz in care ar trebui sa incerci cu un programator OCD ... . Pe scurt, e mai ieftin sa iei alt controller. Stiu la ce se foloseste: #ifndef, #ifdef, #else, #define, #typedef...Sorry. Link spre comentariu
Vizitator fantomass Postat August 8, 2009 Partajează Postat August 8, 2009 pai am mai dat peste programatorul acesta. Iau arhiva usbasp.2009-02-28.tar.gz , fac placa, deschid main.c, compilez si dupa aia scriu in atmega 48? Si dupa aia am programator pe usb? Dupa ce am facut asta deschid un hex cu Extreme Burner Avr sau cu AvrDude, si dupa aia scriu in controlerul cu care vreau sa lucrez? Sorry. @fantomass Daca SPIEN fuse e problema, ar trebui sa incerci cu un programator JTAG. Asta daca nu cumva a fost dezactivat si JTAGEN. Caz in care ar trebui sa incerci cu un programator OCD ... . Pe scurt, e mai ieftin sa iei alt controller. Sa stii ca nu am modificat nimic in afara de bitii pt cuart. Link spre comentariu
deep-blue Postat August 8, 2009 Partajează Postat August 8, 2009 pai am mai dat peste programatorul acesta. Iau arhiva usbasp.2009-02-28.tar.gz , fac placa, deschid main.c, compilez si dupa aia scriu in atmega 48?Si dupa aia am programator pe usb?Dupa ce am facut asta deschid un hex cu Extreme Burner Avr sau cu AvrDude, si dupa aia scriu in controlerul cu care vreau sa lucrez?Schimba din descrierea ta "deschid main.c" cu "modific ca sa-mi corespunda configuratia" si gata, asta e tot. Configuratia default e pentru ATmega8 la 12MHz. Daca folosesti ATmega48 va trebui sa modifici in Makefile TARGET, HFUSE si LFUSE. Scrie acolo cum se face.Pentru alte frecvente ale quartz-ului (posibil 12.8 MHz, 15 MHz, 16 MHz, 16.5 MHz sau 20 MHz) va trebui sa mai faci 2 mici modificari in clock.h si usbdrvasm.S. Dar sa nu fac lucrurile sa para mai complicate decat sint. Link spre comentariu
Vizitator fantomass Postat August 8, 2009 Partajează Postat August 8, 2009 pai m-am gandit la asta, scuze de exprimare, is prea obosit ca sa mai gandesc .Daca zici tu ca merge, eu am sa il fac . Link spre comentariu
Vizitator ender81 Postat Noiembrie 20, 2009 Partajează Postat Noiembrie 20, 2009 Scuzati deranjul, dar am si eu o problema cu un atmega16. Sunt incepator, il programasem sa aprinda niste leduri si apoi pe alt port incercam sa lucrez cu un motor stea (sa invat ce tensiuni trebuie aplicate folosind si o punte h) asta in timp ce ledurile mergeau. La un moment dat cred ca am scurtcircuitat ceva si cred ca am aplicat pe atmega o tensiune de vreo 15V si de aici au inceput necazurile. Imediat ledurile s-au stins si cand am incercat sa-l reprogramez folosind winavr pe lpt si ceasul lui interg de 1mhz am fost anuntat ca nu merge conexiunea cu atmega.Credeti ca s-a ars sau mai e vreo metoda de al readuce la viata? Este vreo metoda sa-l testez sa fiu sigur daca se mai poate face ceva? Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum