aetius Postat Martie 22, 2021 Partajează Postat Martie 22, 2021 Salutare tuturor... As dori un ajutor din partea voastra pentru portarea unui cod de la 12F508 la 12f629, precizez ca sunt incepator in ale picului(nivel hobby pe linga casa). Este un rogerbeep, am instalat Mplab v.2.30 pt. acest cod ,dar ma depaseste. Multumesc anticipat. title "Roger v.1.1 - created by OK1MPE" list P=12F508, F=INHX8M INCLUDE <P12F508.INC> __config 0FEAH ; _CP_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF ; --------------------------------------------------------------------- ; ; This software is free for private usage. It was created for HAM radio ; community members. Commercial exploatation is allowed only with ; permission of author. ; ; (C) Petr Bittnar, OK1MPE ([email protected]), CZ, www.qsl.net/ok1mpe ; ; --------------------------------------------------------------------- ; ; History: ; 27.07.10 procesor 12F508 add "K" ; 25.03.01 * v.1.1 - add on/off function ; 19.03.99 * v.1.0 - first public version ; ; --------------------------------------------------------------------- ; ;********************************************************************** ;* RC int., Tcpu=1us, 12F508 MPASM 2.30 25.3.01 * ;********************************************************************** ; ; Vdd -| U |- Vss ; ptti -| |- D0 ; ptto -| |- D1 ; D2 -| |- mod c equ 0 ;def. c,dc,z - status dc equ 1 z equ 2 d0 equ 0 ;def. GPIO d1 equ 1 d2 equ 3 mod equ 2 ptto equ 4 ptti equ 5 ;definition RAM (registers): rtcc equ 1 pc equ 2 status equ 3 fsr equ 4 osccal equ 5 gpio equ 6 freq equ 10 delay equ 11 temp equ 12 ;********************************************************************** ;* M A C R O * ;********************************************************************** ton macro freq_,delay_ movlw freq_ ;settings parameters (freq and delay) movwf freq ; movlw delay_ ; movwf delay ; call gen_ton ;call subrutine for generation wave endm org 0 ;reset vector movwf osccal ;calibration value for RC osc. ;********************************************************************** ;* settings ports, prescaler ... * ;********************************************************************** ;ports: 0-output, 1-input start movlw b'00101011' ;settings GPIO tris gpio ; clrf gpio movlw b'10000111' ;ps 1:256, pull-up option ; ------------------------ on/off function ---------------------------- movlw .80 ;timer 2s movwf temp ;(80 x 25) onoff btfsc gpio,ptti ;release PTT key? goto main ;yes goto main call wait ; decfsz temp ;timer overflow? goto onoff ;no repeat roger_off goto roger_off ;yes turn permanently off ; ------------------------ main rutine ------------------------------- main btfsc gpio,ptti ;wait for PTT key (press) goto $-1 ; call wait ;wait a moment btfss gpio,ptti ;wait for PTT key (release) goto $-1 ; bsf gpio,ptto ;PTT output = H (TX on) call wait ; call wait ;wait 100ms call wait ; call wait ; clrf temp btfss gpio,d0 ;read input pins D0-D2 bsf temp,0 ; btfss gpio,d1 ; bsf temp,1 ; btfss gpio,d2 ; bsf temp,2 ; movfw temp addwf pc goto typ1 ;typ 1 goto typ2 ;typ 2 goto typ3 ;typ 3 goto typ4 ;typ 4 goto typ5 ;typ 5 goto typ6 ;typ 6 goto typ7 ;typ 7 goto typ8 ;typ 8 typ1 ton .208,.56 ;800Hz, 70ms goto quit typ2 ton .119,.98 ;1400Hz, 70ms goto quit typ3 ; "K" ton .167,.90 ;1000Hz, 90ms call wait ; ton .167,.40 ;1000Hz, 40ms call wait ; ton .167,.90 ;1000Hz, 90ms goto quit typ4 ton .100,.60 ;1200Hz, 50ms ton .228,.37 ;700Hz, 50ms ton .167,.50 ;1000Hz, 50ms goto quit typ5 ton .167,.70 ;1000Hz, 70ms ton .83,.141 ;2000Hz, 70ms goto quit typ6 ton .83,.141 ;2000Hz, 70ms ton .167,.70 ;1000Hz, 70ms goto quit typ7 ton .208,.40 ;800Hz, 50ms ton .167,.50 ;1000Hz, 50ms ton .139,.60 ;1200Hz, 50ms goto quit typ8 ton .139,.60 ;1200Hz, 50ms ton .167,.50 ;1000Hz, 50ms ton .208,.40 ;800Hz, 50ms goto quit quit call wait ;wait a moment bcf gpio,ptto ;PTT output L (TX off) call wait ; goto main ;********************************************************************** ;* S U B R U T I N E S * ;********************************************************************** ;subrutine: generation wave gen_ton movfw freq ;set temp from freq movwf temp ; bsf gpio,mod ;modulation = H loop_hi decfsz temp ;repeat while temp>0 goto loop_hi ; movfw freq ;set temp from freq movwf temp ; bcf gpio,mod ;modulation = L loop_lo decfsz temp ;repeat while temp>0 goto loop_lo ; decfsz delay ;repeat while delay>0 goto gen_ton ; retlw 0 ;---------------------------------------------------------------------- ;subrutine: wait 25ms wait movlw .158 ;(256-158)x256us movwf rtcc ;rtcc=25ms movfw rtcc ;read rtcc btfss status,z ;overflow? goto $-2 ;no repeat retlw 0 ; end Link spre comentariu
UDAR Postat Martie 22, 2021 Partajează Postat Martie 22, 2021 Pentru portare trebuie să pui alături cele două foi de catalog - de la 508 și de la 629 . Ai să observi că : 1. Cuvintele de configurare sunt diferite deci directiva __CONFIG trebuie modificată în consecință. Atenție la biții de calibrare. 2. Registrul GPIO are adresa 5 la 629 nu 6 ca la 508. 3. Registrul OSCCAL este în bancul 1 ( la 508 exista un singur banc - 0 ) . Trebuie urmate indicatiile din DS. 4. Registrul OPTION este usor diferit si se află tot în bancul 1 5. Instrucțiunile TRIS și OPTION nu mai există la 629 , trebuie înlocuite cu MOVF, MOVWF 6. Poate mi-a scăpat ceva În concluzie portarea se poate face dar cu ceva muncă și cu multă atenție. Link spre comentariu
aetius Postat Martie 23, 2021 Autor Partajează Postat Martie 23, 2021 O s-a incerc ... Multumesc. Link spre comentariu
aetius Postat Martie 23, 2021 Autor Partajează Postat Martie 23, 2021 (editat) list P=12F629, F=INHX8M INCLUDE <P12F629.INC> __config _CP_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF Atia am reusit s-a inteleg si unde s-a fac modificarea...(sau atit am inteles). In rest ori mai citesc, ori ma dau batut... Multumesc. Editat Martie 23, 2021 de aetius Link spre comentariu
UDAR Postat Martie 23, 2021 Partajează Postat Martie 23, 2021 N-am vrut să spun din prima postare dar ... - Dacă vrei să înveți să programezi microcontrolere cred că nu are rost să muncești cu limbajul de asamblare . E greoi, consumator de timp, există diferențe de la un microcontroler la altul, pot fi probleme de compatibilitate cu bibliotecile de funcții pe care - inevitabil - va trebui să le ”împrumuți” . Orientează-te mai bine spre un limbaj de nivel înalt . O idee pentru PIC - MikroC Pro for PIC de la Mikroelectronica , gratuit pentru până la 2048 linii cod. Și mai sunt multe alte variante atât pentru PIC cât și pentru ATMEL. - Dacă vrei doar să faci proiectul cumpără pur și simplu un PIC12F508 - e câțiva lei . Link spre comentariu
aetius Postat Martie 23, 2021 Autor Partajează Postat Martie 23, 2021 Doar pentru a face proiectul si aveam prin sertar 12F629... ok, multumesc. Link spre comentariu
darius_bv Postat Iunie 4, 2021 Partajează Postat Iunie 4, 2021 La 23.03.2021 la 20:22, UDAR a spus: N-am vrut să spun din prima postare dar ... - Dacă vrei să înveți să programezi microcontrolere cred că nu are rost să muncești cu limbajul de asamblare . E greoi, consumator de timp, există diferențe de la un microcontroler la altul, pot fi probleme de compatibilitate cu bibliotecile de funcții pe care - inevitabil - va trebui să le ”împrumuți” . Orientează-te mai bine spre un limbaj de nivel înalt . O idee pentru PIC - MikroC Pro for PIC de la Mikroelectronica , gratuit pentru până la 2048 linii cod. Și mai sunt multe alte variante atât pentru PIC cât și pentru ATMEL. - Dacă vrei doar să faci proiectul cumpără pur și simplu un PIC12F508 - e câțiva lei . Ma bucur ca mai sunt oameni care au invatat si sunt dispusi sa ajute, ca dumneavoastra. Eu lucrez numai in limbaj de asamblare, pentru ca imi ofera controlul totoal asupra dispozitivului: alocarea memoriei, controlul perifericelor, flag-urilor, etc. Am lucrat si in C, dar din curiozitate am dezasamblat niste rutine compilate in C si mi-am pus maninile in cap: la varianta "lite (free)" a softului testat la fiecare instructiune utila mai executa cel putin doua instructiuni de transfer, deplasare, testare, etc, absolut in plus, care ocupau memoria si scadeau viteza. La un uC cu optiuni "nelimitate" nu e o problema memoria, dar viteza da. La un 16F676 cu 1K flash si 64 octeti RAM, e o mare problema. Varianta "full" costa cateva sute de dolari, probabil ca functiona corect, dar tot n-as baga mana in foc. Atasez un exemplu de utilizare a memoriei aproape 100% pentru un termostat programabil de mare precizie facut cu PIC16F676 cu multi ani in urma. Pe langa afisarea multiplexata calculeaza o functie de transfer pentru adaptarea optima a senzorului utilizand rutine pe 16biti. Am utilizat cam tot ce se putea din acel cip, apeland inclusiv la realocarea memoriei, atunci cand ramaneam in pana. A fost o ambitie, dar de peste 10 ani functioneaza perfect, nu s-a blocat niciodata. Link spre comentariu
UDAR Postat Iunie 4, 2021 Partajează Postat Iunie 4, 2021 Ai în principiu dreptate . Ideea e că cine vrea performanță dă banul. Totuși sunt compilatoare/IDE-uri destul de performante și în gama free. Eu am lucrat și lucrez cel mai mult (de fapt aproape exclusiv) cu MikroC Pro For PIC - dacă te încadrezi în cei doi 2k nu prea sunt probleme, codul este destul de eficient . Sigur că și priceperea de programator contează sau cunoașterea (și aplicarea) unor mici trucuri. De pildă dacă utilizezi de mai mult de 3-4 ori delay_ms() cu același argument e mai bine să faci o funcție apelabilă clasică în locul rutinei in_line implicite (dacă stiva îți permite), etc. În ce privește compilatorul despre care vorbești - dacă e cel care cred eu - da, cam așa face . După mine cea mai mare problemă în assembler sunt rutinele matematice . Nu cred că vrea cineva să stea să scrie de la zero o rutină de împărțire 32/32 . Doar dacă ai niște biblioteci verificate și eficiente din care să împrumuți funcțiile necesare. Eu am scris doar un caz particular de înmulțire cu o constantă ca să obțin un număr pe 48 de biți și apoi o împărțire a acestuia cu un număr de 32 de biți - și acesta dintr-un domeniu limitat - și am muncit mai multe zile (desigur nu încontinuu) . În ce privește controlul perifericelor nu văd o problemă. Toate compilatoarele (cred) permit folosirea asm inline sau ca funcție . Și eu folosesc uneori funcții proprii pentru ADC, LCD, SPI . Link spre comentariu
darius_bv Postat Iunie 4, 2021 Partajează Postat Iunie 4, 2021 Cred ca programarea in limbaj de asamblare ar trebui sa fie punctul de plecare in studierea microcontrolerelor, pentru ca in acest fel intelegi cel mai bine arhitectura si functionarea lor. In legatura cu utilizarea functiilor matematice, da este o mare provocare. Stiu ca am studiat aritmetica binara saptamani bune inainte sa ma apuc de soft. Va doresc numai bine! Link spre comentariu
Bandi Szasz Postat Iunie 5, 2021 Partajează Postat Iunie 5, 2021 (editat) Problema cred ca ar trebuii pusa putin diferit, atat timp cat nu esti mai mult sau mai putin inginer de uC sa lucrezi in domeniu nu prea merita sa te complici cu _asm din punct de vedere pret/ timp investit. Eu nu inteleg pe unii care se cramponeaza sa foloseasca uC uri antice cum e si 12F629, probabil ca proiectele pe care vor sa le realizeze au fost facute cu multi ani in urma. Un PIC de generatie noua de exemplu PIC16F18326 are 26kB flash / 2kB RAM si ruleaza la 32Mhz.. diferenta de pret este cam de 2lei. Si atunci ma intreb in regim de amator/hobby merita investit atat timp sa inveti _asm pentru aia 2lei sau mai bine iei un PIC de generatie noua cu suficient spatiu si nu te mai doare capu. Asm nu se mai preda nici in facultate, cel putin nu practic doar ceva teorie asa foarte foarte basic, cam ce e si cum arata si cam atat, motivul este ca in vremurile actuale cand trebuie sa scoti pe banda rulanta sau sa fie totul gata cat mai repede nimeni nu se apuca de programat in _asm, companiile mari isi permit lejer licente de sute de euro facute calumea, daca varianta "free" ar fi la fell de performant nimeni nu ar mai cumpara licente. Chiar si in regim hobby partea de uC ca de trait traiesc din programare cel putin mie mi se pare mult mai rentabil o licenta MikroC care nu e capat de tara decat sa ma apuc de bibilit _asm. Candva nu zic ca nu a fost pe val si _asm ul insa incet incet nu mai este. Editat Iunie 5, 2021 de Bandi Szasz Link spre comentariu
modoran Postat Iunie 5, 2021 Partajează Postat Iunie 5, 2021 Pai se complica lumea cu uC-uri antice tocmai din cauza faptului ca pentru alea poti sa dai usor copy paste de pe net sa copiezi un proiect gata facut de altii. Link spre comentariu
darius_bv Postat Iunie 5, 2021 Partajează Postat Iunie 5, 2021 Va dau dreptate, e simplu sa dai copy-paste la un proiect de pe net, pentru orice tip de microcontroler. Exista totusi si o parte buna: poate la un moment dat cel care doreste sa realizeze ceva rapid, fara a avea cunostinte de programare, sa devina curios. Azi modifica ceva... vede ca-i place, maine modifica altceva si-apoi ia documentatia si studiaza. Si in acest fel un om din tagma celor absenti din propria viata, care merg cu telefonul in mana si castile pe urechi si iau totul de-a gata, este salvat; poate sa fie creativ si sa-si castige singur painea. Este importanta scanteia aceea care, la un moment dat a aparut in viata fiecarui pasionat! 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