Jump to content
ELFORUM - Forumul Electronistilor

Marin1960

Membru activ
  • Content Count

    101
  • Joined

  • Last visited

Community Reputation

13 Se poate si mai bine

About Marin1960

  • Rank
    Membru

Profile Information

  • Locatie
    Bucuresti

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. @gabitzu2006 am atasat fisierul sursa modificat. Sunt adaugate 11 linii si sterse 20 din fisierul original. Pentru alta pereche, modifici ID-ul de la linia 13 in receptor si emitator, apoi compilezi. Succes! receiver_attiny13_v2.asm
  2. @gabitzu2006 , am pus un hex, de data asta testat. Functioneaza pe toate cele 4 canale. La apasarea oricarui buton, functioneaza ON-OFF (celelalte canale sunt trecute pe OFF). Sper sa te ajute! receiver_attiny13_v2.hex
  3. Incearca hex-ul de mai jos, ar trebui sa "mearga" asa cum vrei: la o apasare a butonului 1 cupleaza releul 1 si opreste celalalt releu daca a fost actionat anterior. Din pacate nu am avut timp sa-l testez, ar putea sa nu functioneze... receiverATTiny13_v1.hex
  4. Esti pragmatic, probabil ca 40 Euro nu-i asa mult, dar ce te faci cu satisfactia montajului facut de tine? Distanta Pamant Luna e un miraj pentru fiecare din noi: incercam sa ne atingem dorintele cu forte proprii. Mai scump si mai drag mi-a fost o luneta facuta din lentile de ochelari la 13 ani decat un telescop de 254 cumparat la 56. Imaginea lunii de la 13 ani nu s-a comparat niciodata cu cea vazuta prin mai performantele instrumente pe care mi le-am permis mai tarziu. Am un galep4 si un batronix, dar lucrez foarte mult cu usbasp facut de mine acum multi ani si chiar cu openprog din cand in cand (cand "busesc" fusebitii cu usbasp), asa ca sa sa acordam intelegere pentru cei mistuiti de focul pasiunii.
  5. AVR-urile pot fi programate in 3 moduri: Serial Programming (SP), High Voltage Serial Programming (HVSP) si Paralel Programming (PP High Voltage). Toate AVR-urile pot fi programate in SP, unele si in HVSP (cum sunt ATTiny13,25,45 etc), altele si in PP (cum este ATTiny2313... sau Atmega8, 16, etc). Openprog functioneaza pe HVSP cu AVR-urile care pot fi programate astfel (exemplu ATTiny13 sau 25) iar pe SP pe celelalte care au si PP. Avantajul programarii seriale, fie HV sau normale este ca au cateva semnale (SCI, SDO, SII, SDI,+5V, +12V, GND pentru HVSP sau SCK, MOSI, MISO, RESET,+5V, GND in cazul SP) . In cazul programarii paralele, o multime de semnale, ceea ce duce la o complicatie inutila in cazul unei solutii ieftine si rapide. Pentru rezolvarea problemei lui @gabitzu2006, recomand studierea schemei originale de pe http://openprog.altervista.org/OP_eng.html si aducerea semnalelor necesare la pinii corespunzatori ai soclului respectiv. The end.
  6. Cred ca ai o greseala pe cablaj. Pinul 2 al soclului U55 e lasat in "aer" (ar trebui legat la pinul 10, conector 51, RESET), iar pinul 1, pare ca se duce si la VPP si la Reset (atat cat se vede din poza destul de neclara in zona respectiva).
  7. Problemele tale cu OpenProg, m-au determinat sa fac niste "sapaturi" la programatorul meu. Ca si la tine, uneori, tensiunea de 12V cadea la 4,7V si isi revenea doar dupa ce scoteam mufa usb si-l reinitializam. Pentru ca l-am folosit foarte rar (am un Galep) n-am dat importanta, dar acum am zis hai sa vedem ce intampla. Asa ca am descoperit ca daca inlocuiesc bobina de 100uH (care era in format rezistor) cu una tot de 100uH (dar cu oala de ferita), tensiunea este foarte stabila si nu mai dispare deloc! Poate te ajuta.
  8. Sunt doua moduri diferite de programare: High-Voltage Serial Programming (foloseste tensiunea de 12V pe pinul de Reset si semnalele SDO, SII, SDI, SCI) si Serial Programming care utilizeaza tensiune normala si semnalele cunoscute: SCK, MISO MOSI si RESET. Acronimele respective sunt explicate in manual. In concluzie doua moduri diferite de programare, OpenProg il foloseste pe primul iar Arduino pe al doilea.
  9. Atmega 8 nu are High Voltage Serial Programming ca ATTiny13 si 25. Programarea se face la tensiune normala de 5V. Am inteles ca folosesti OpenProg, in cazul asta de ce nu testezi, fara procesor in soclu, sa vezi daca ai tensiunile care trebuie pe pinii soclului U55 (soclul cu 8 pini unde programezi ATTiny)? Cu functia I/O din OpenProg, validezi VDDU pe care ar trebui sa o regasesti pe pinul 8 al soclului, iar validarea VPPU o regasesti pe pinul 1 al aceluiasi soclu. Daca ai aceste doua tensiuni continui cu aducerea in 1 a semnalelor RB1, RB0, RC7, RC6 si regasirea lor pe pinii 7, 6, 5 si 2 ai soclului. Vad ca deja ai masurat 6V pe pinul 1, cred ca aici e problema!
  10. Pentru cei care vor sa faca telecomanda asta cu ATTiny13 sau ATTiny25, am pus hex-urile respective (cele originale pentru ATTiny13 si cele modificate pentru ATTiny25). Fusebitii sunt cei default. "Merg" in orice combinatie: emitator ( attiny13) cu receptor (attiny25), emitator ( attiny25) cu receptor (attiny13) etc. Testat. transmitterATTiny13.hex transmitterATTiny25.hex receiverATTiny13.hex receiverATTiny25.hex
  11. Completare pentru textul anterior: daca frecventa de lucru a microprocesorului poate fi 1MHz sau 1,2MHz pentru o functionare corecta, exista totusi o diferenta intre cele doua procesoare. Softul emitatorului nu pune probleme, poate fi folosit la ambele procesoare fara nici o modificare (semnalul emis va fi mai lat cu 20% la ATTiny25). Softul receptorului insa trebuie modificat pentru ATTiny25, deoarece exista un registru cu functionare identica in ambele procesoare, dar cu denumiri si continut diferit: Timer/Counter Interrupt Mask Register. La ATTiny13 se numeste TIMSK0 si are urmatorul continut: In softul receptorului se seteaza valoarea bitului 2 (OCIE0A). iar la ATTiny25 se numeste TIMSK si are urmatorul continut: Modificarea softului consta in scrierea aceluiasi bit (OCIE0A), aici insa pe pozitia 4. Odata facuta aceasta modificare pentru receptorul cu ATTiny25, va functiona fara probleme cu emitatorul cu ATTiny25 (si chiar cu ATTiny13, abatarea de 20% fiind in parametrii acceptati de soft). @gabitzu2006 succes la mesterit!
  12. Emitatorul si receptorul sunt construite cu acelasi procesor: ATtiny13 / 1,2MHz. Codul este foarte simplu, emitatorul transmite o secventa ca in imaginea de mai jos: Practic nu conteaza durata impulsurilor, atata timp cat emitatorul si receptorul functioneaza cu aceiasi frecventa: conteaza ca raportul lor este acelasi. De exemplu in fisierul "transmitter" avem la un moment dat secventa de transmitere a impulsului scurt (cel de 128us din imagine): ;Impuls scurt ;Krátký impulz KRATKA_1: SBI PORT,4 LDI REG,40 ;2,5us = 100us CEKEJ_K1: DEC REG BRNE CEKEJ_K1 In realitate nu este exact de 128 us, conteaza insa ca procesorul face 40 de iteratii intr-o bucla care are 2 instrunctiuni (DEC REG care are 1 ciclu si BRNE CEKEJ_K1 care are 2 cicli, in total 3 cicli) in concluzie 40 x 3 = 120 cicluri. Daca procesorul este tactat la 1,2 MHz atunci un ciclu este 1/1200000=0.833us, adica o durata de aproximativ 100us. Daca procesorul ar fi tactat la 1MHz, atunci durata ar fi fost de 120us, raportul duratelor 120/100=1,2 este identic cu cel al frecventelor de tact 1200000/100000=1,2. Concluzia este sa nu-ti faci nici un fel de problema: vor functiona sigur si la 1MHz cat poate fi setat ATtiny25. Succes!
  13. Cred ca ar fi interesant @gabitzu2006, daca ne-ai impartasi din experienta ta cu rtc-ul sincronizat de la gps. Nu de alta, dar astept cu nerabdare gps-urile comandate de la chinezi si pana atunci, poate imi clarific cum sa fac sincronizarea gps-rtc!
  14. Atentie, in codul tau, daca conditia "aici_conditia_ta" nu face parte dintr-un lant de decizii, ci este pusa pur si simplu in corpul loop-ului, atunci motoarele vor merge practic continuu (o scurta intrerupere la finalul rutinei "curatire()", prea scurta pentru a o sesiza! In exemplul urmator, "aici_conditia_ta" este setata o singura data prin intermediul pinului 12: // liniile bordate de stelute sunt pentru a simula comanda ta // de pornire a motoarelor si a trebui sterse din programul final #define ventilator 3 #define motor_inainte 4 unsigned long temp; bool curatire_on = false; bool aici_conditia_ta = false; //true ar trebui setata in codul tau // void setup() { pinMode(ventilator, OUTPUT); pinMode(motor_inainte,OUTPUT); digitalWrite(ventilator,LOW); digitalWrite(motor_inainte,LOW ); } void loop(){ if(curatire_on) curatire(5000); // 5000ms = 5secunde if(aici_conditia_ta){ digitalWrite(ventilator,HIGH); digitalWrite(motor_inainte,HIGH ); curatire_on = true; temp = millis(); } //****************************** // codul dintre liniile cu stelute ar trebui sters din programul final // sunt doar pentru a simula comanda ta "aici_conditia_ta = true;" // pinul 12 pus la masa pentru scurt timp pinMode(12, INPUT_PULLUP); if(!digitalRead(12)){ // codul tau unde setezi "aici_conditia_ta" in functie aici_conditia_ta = true; // de nevoile tale } //****************************** } void curatire(int durata){ aici_conditia_ta = false; if(millis()-temp < durata) return; digitalWrite(ventilator,LOW); digitalWrite(motor_inainte,LOW); curatire_on = false; } Cred ca at trebui sa postezi si incercarile tale, sa vedem unde este problema. Succes!
×
×
  • Create New...