Sari la conținut
ELFORUM - Forumul electronistilor

Probleme de incepatori


ole

Postări Recomandate

  • 2 săptămâni mai târziu...

Khazama lucreaza la partea de "fusebit" si "Lockbit" invers decit altele, de ex. eXtremeBurner, PonyProg..

 

Adica la Pony "checked" este exact "Checked", adica activat adica '0'. La Khazama e exact matematic: "checked"='1'.

 

Asa am blocat un Atmega162 cu khazama. Ca atare am fost nevoit sa imi fac si un Atmega Doctor.

Editat de diaconuliviu
Link spre comentariu

Salutare,

 

Am inceput sa lucrez la o sursa la care voi folosi doua DAC-uri pentru control U si I, dar am ajuns intr-un punct in care m-am "blocat".

Pentru reglajul tensiunii si curentului, voi folosi un Encoder, insa ca sa nu "bobinez" de la 0 la 4096 din degete, m-am folosit de butonul de pe Encoder pentru a "activa" reglajul de tip fine = 1x si coarse = 25x. Aceasta parte de cod functioneaza minunat (posturile #784, #782, etc), insa am ramas fara pini liberi la uC si mai am nevoie de un buton din care sa trec de pe reglajul tensiunii pe reglajul curentului, iar acum ma gandeam ce solutie ar fi ca in momentul in care apas scurt pe butonul de pe Encoder sa mi se activeze reglajul fine/coarse, iar daca tin apasat sa zic 2 secunde, sa treaca din reglaj tensiune in reglaj curent si invers. Pentru aceasta trecere voi folosi o variabila ce poate lua doua valori: 0 = reglaj tensiune, 1 = reglaj curent.

 

Dati-mi va rog un punct de plecare pentru aceasta problema.

 

Multumesc,

Marius.

 

 

edit: Am uitat poza. Butonul de pe Encoder este conectat la INT0 pe Atmega8

 

Ciao,

 

Intre timp mi-am rezolvat problema pe care nu stiam de unde sa o apuc, am scris o varianta care functioneaza in simulare, presupun ca si in realitate.

 

Programul este cel de mai jos, cu explicatii pe care eu asa le-am inteles, daca e ceva gresit, va rog sa ma corectati :

$regfile = "m8def.dat"$crystal = 8000000$hwstack = 40$swstack = 16$framesize = 32Waitms 200Dim A As Word                                               'la fiecare overflow al lui timer0 se va incrementa variabila ADim B As Byte                                               ' B se va incrementa la fiecare secunda cu 1;Dim C As Bit                                                ' folosit pentru setat Tensiunea sau Curentul in aplicatia pe care o dezvolt;Dim D As Bit                                                ' folosir pentru setat Coarse si Fine .Config Portd.4 = Output                                     'PORTD.4 si PORTD.5 - monitorizez fizic cele doua variabile cu niste "leduri"Config Portd.5 = OutputConfig Pind.2 = Input                                       ' butonul de pe EncoderConfig Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0Config Lcd = 16 * 2Config Timer0 = Timer , Prescale = 64On Timer0 Timer0_isrEnable InterruptsEnable Timer0Stop Timer0DoIf Pind.2 = 0 Then                                          ' apas butonul   A = 0                                                    'resetez cele doua variabile   B = 0   Start Timer0                                             'pornesc timer0 sa numere   Do   Loop Until Pind.2 = 1                                    'ramane in bucla pana las butonul.   Stop Timer0                                              'opresc timer0      If B > 0 Then                                         'verific daca a trecut mai mult de 1 secunda      Toggle C                                              'schimb starea U sau I      Else      Toggle D                                              'altfel schimb starea Fine / Coarse      End If      Portd.4 = C                                           'aprind ledurile      Portd.5 = DEnd IfLocate 1 , 1                                                'afisez pe display "lucrarea"Lcd "B: " ; BLocate 2 , 1Lcd "c: " ; CLocate 2 , 8Lcd "d: " ; DLoopTimer0_isr:Incr A                                                      'incrementez A la fiecare overflow :If A >= 490 Then   A = 0   Incr BEnd IfReturn'(   Pentru calculul timpului pana face overflow se foloseste:     ( 2^n - 1 ) * Prescaler / F_osc => 255 * 64 / 8000000 = 0.00204 secunde , adica 2.04ms pentru overflow.     TIMER0 este pe 8 biti (vezi datasheet) , de aici reiasa 2^n-1 = 255     Prescaler se seteaza la inceputul programului     F_osc = > frecventa la care lucreaza microcontrolerul.     Daca face overflow la 2.04ms, atunci 1 secunda / 2.04ms = 490.196 ( A>=490 )     Dupa ce TIMER0 face de 490 de ori overflow, putem incrementa variabila B cu 1 , asta inseamna ca a trecut aproximativ 1 secunda: 0.9996 secunde in calcul fix.')
Link spre comentariu
@mariuss_suciu: Pentru problema cu pinii, pe langa cea propusa de tine, care e f buna, ai mai putea folosi si un registru paralel serial (ex. 17xx165). Inseriind mai multe registre, poti teoretic citi un nr nelimitat de inputuri pe un singur pin.Ai un tutorial aici: http://extremeelectronics.co.in/avr-tutorials/using-shift-registers-with-avr-micro-avr-tutorial/Doar l-am frunzarit. Daca ai nevoie de mai multe detalii, iti voi raspunde.@spark: Cum ai conectat uC la usbASP? Cat de lung e cablul?Pe langa problema cu conexiunile, de care au zis colegii, poate fi si viteza prea mare. Incearca o viteza mai mica (optiunea -B).A mai fost programat uC in cauza sau e virgin? Daca da, ai umblat la fusebits?
Link spre comentariu

cablu nu prea a contat , am confectionat un "racord" prelungitor din cablu panglica cu conectori molex 2x5pini __lungimea este de 40cm

setare bitclock care este default 1,5MHz       la         750KHz sau 375KHz

iar la fusebiti setarea se face in functie de programul folosit la scriere (poate fi si default)

inca invat si eu , pentru mine este o lume noua uC , sunt fascinat , dealtfel pe baietii care scriu softuri ii consider zei

am acasa un programator (fratemeu) dar nu te poti intelege cu el , sunt cam ciudati un pic si prietenii lui cam la fel 

____PS___a programat cineva cu BitBurner cum merge cu usbasp  ??????

Link spre comentariu

@spark: Si eu sunt programator :). Pana la urma ai rezolvat problema? Daca da, cum? Nu inteleg din postul tau.Cablul ala de 40 cm e cam lung. La programatoare, avand multe fire neecranate si frecventa maricica, sunt destul de predispuse la interferente.

Editat de keenox
Link spre comentariu

ar fi o idee să foloseşti un prelungitor usb în care să pui usb-asp-ul ăla.usb-ul e destul de imun la paraziţi, şi cu un pic de baftă, cablul e ecranat, aşa că din partea conexiunii usbasp-pc nu-ţi mai faci griji.

 

aşa poţi folosi un cablu conector mai mic între usbasp-montaj, lucru care o să te scutească de sf-urile care apar din cauza cablurilor prea lungi...

 

 

avrdude.exe: initialization failed, rc=-1

 

din experienţa mea, avrdude dă eroarea aia când nu vede mcu-ul deloc, ceea ce înseamnă 2 lucruri:

- conexiuni hardware greşite. pot fi orice, de la inversarea a 2 fire la lipsa continuităţii între 2 puncte oarecare din tot ansamblul pc-usbasp-montaj. de asemenea, de asemenea, poate fi vorba de lipsa tensiunii de alimentare de 5 volţi.

- avr blocat. asta dacă e recuperat, sau a mai fost scris, şi a fost folosit într-un montaj care folosea cuarţ şi o frecvenţă de tact diferită de cea "factory default": oscilator intern de 1 mhz. mai nou, de 8...

 

 

reverifică cu atenţie conexiunile, asigură-te că ai 5 volţi la pinul de alimentare al mcu, şi dacă e nou şi încă n-ai umblat la fusebiţi ar trebui să-ţi meargă.

Link spre comentariu
  • 2 luni mai târziu...

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum
×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări