www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Mehki zagon s pwm-jem PIC 16F877A

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja PIC-a v Assembler-ju
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
jakar
Član
Član



Pridružen-a: Sob 22 Maj 2004 21:34
Prispevkov: 190
Aktiv.: 0.86
Kraj: Primorska

PrispevekObjavljeno: Sob Jan 02, 2010 6:42 pm    Naslov sporočila:  Mehki zagon s pwm-jem PIC 16F877A Odgovori s citatom

Pozdravljeni,
Prilagam program, ki mi dela sive lase. Delovanje: najprej sledi inicializacija PWM-ja in timer-ja. Za izhod je določen pin RC2. Po inicializaciji sledi branje EEPROM-a na lokaciji 0x00, kje je predhodno zapisna konstanta za razmerje PWM-ja. Sledi mehek zagon, kjer se PWM »pobere« od 0 do 100% v približno dveh sekundah. Tu preverjam kdaj dosežem vrednost, ki je bila zapisana v EEPROM-u, ko je dosežena skočim nazaj v glavno zanko. Če debagiram z MPLAB SIM dela kot mora in se PWM ustavi pri razmerju 50-50 . Ko pa vpišem program v PIC se mi signal spreminja od 0 do 100% in se ne ustavi pri pred nastavljeni vrednosti v EEPROM-u. Ker nimam še izdelanega ICD2 clona ne moram debagirati, zato prosim, če mi lahko kdo pomaga poiskati kaj delam narobe.




Koda:


   include p16f877a.inc
   errorlevel -302         ;če želimo da MPASMWIN kakega opzorila ne kaže
   __CONFIG _HS_OSC & _WDT_OFF & _PWRTE_OFF & _BODEN_OFF & _LVP_OFF & _CPD_OFF & _CP_OFF & _DEBUG_OFF

STEVEC1      EQU   0X20
STEVEC2      EQU   0X21
NASLOV_EE   EQU   0X22
PODATEK_EE   EQU   0X23
ZAGON      EQU 0X24

   org 0x2100   ;pripravim zeljeno vrednost v eeprom
     de 0x80

   ORG   0
   call INACIALIZACIJA
   CALL BRANJE_EE
   CALL MEHKI_ZAGON

GLAVNA_ZANKA

   NOP

   GOTO GLAVNA_ZANKA

;******************************************************************
;****************************** M E H K I  Z A G O N *****************
MEHKI_ZAGON
   CLRF   ZAGON
   MOVF   ZAGON,W
   MOVWF   CCPR1L         ;NASTAVLJAM ŠIRINO PWM-ja
   CALL   ZAKASNITEV      ;ZAKASNITEV, DA TRAJA POSTAVITEV
   INCF   ZAGON,F         ;PWM-ja OD 0% DO 100% PRIBLIŽNO 2 SEKUNDI
   MOVF   ZAGON,W
   SUBWF   PODATEK_EE,W   ;ALI SEM ŽE DOSEGEL SHRANJENO VREDNOST?
   BTFSS   STATUS,Z
   GOTO   $-7
   RETURN

;******************************B R A N J E   E E P R O M A************
BRANJE_EE
   MOVF   NASLOV_EE,W   ;LOKACIJA BRANJA EEPROMA
   BSF      STATUS,RP1
   MOVWF   EEADR
   BSF      STATUS,RP0
   BSF      EECON1,RD
   BCF      STATUS,RP0
   MOVF   EEDATA,W
   BCF      STATUS,RP1   ;BANKA 0
   MOVWF   PODATEK_EE ; PREBRANO SHRANIM V PODATEK_EE
   RETURN

;****************************** Z A K A S N I T E V ******************
ZAKASNITEV
   MOVLW   .20
   MOVWF   STEVEC2
_ZACETEK
   MOVLW   .255
   MOVWF   STEVEC1
_DELAJ
   DECFSZ   STEVEC1,F
   GOTO    _DELAJ
   DECFSZ   STEVEC2,F
   GOTO   _ZACETEK
   RETURN      
   
;***********************INACIALIZACIJA********************************

INACIALIZACIJA

   BSF      STATUS,RP0      ;BANKA1
   BCF      STATUS,RP1
   MOVLW   0XFF
   MOVWF   PR2
   BCF      STATUS,RP0      ;BANKA 0
;   MOVLW   0X60         ; ŠIRINO PREKLOPA NASTAVIM V   PODPROGRAMU
;   MOVWF   CCPR1L         ; ZA MEHKI ZAGON
   MOVLW   B'00001100'
   MOVWF   CCP1CON
   BSF      STATUS,RP0
   BCF      TRISC,2
   BCF      STATUS,RP0
   MOVLW   B'00000100'
   MOVWF   T2CON            ;PWM INC
   RETURN
   END



Lp,
Jaka
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 19.74

PrispevekObjavljeno: Sob Jan 02, 2010 6:47 pm    Naslov sporočila:   Odgovori s citatom

Vrednost v EEPROM tudi zapišeš, ali samo program?
_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
jakar
Član
Član



Pridružen-a: Sob 22 Maj 2004 21:34
Prispevkov: 190
Aktiv.: 0.86
Kraj: Primorska

PrispevekObjavljeno: Sob Jan 02, 2010 6:53 pm    Naslov sporočila:   Odgovori s citatom

Vrednost v EEPROM sem zaenkrat zapisal kar v tabeli pred programiranjem v programu PICFLASH pred vpisom .hex datoteke v PIC. Poskušal sem tudi z funkcijo randomise EEPROMA, ki vpiše naključne vrednosti v EEPROM ampak mi gre program po vsakem resetu PIC-a od 0 do 100%.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Highlag
Član
Član



Pridružen-a: Pet 23 Jan 2004 20:42
Prispevkov: 4034
Aktiv.: 18.17
Kraj: Črnuče

PrispevekObjavljeno: Sob Jan 02, 2010 9:44 pm    Naslov sporočila:   Odgovori s citatom

Hm, koliko sem se sam igral s tem se bila moja koda takšna:

Koda:

Branje                        
   MOVLW   0x00                  ; naloži vrednost adrese prvega bajta EEproma v W
   MOVWF   EEADR               ; naslov se prepiše v EEADR register (da ve s katere lokacije brati)
   BSF      STATUS, RP0            ; select bank 1
   BSF      EECON1, RD            ; EPROM nastavljen na branje (RD -> read)
   BCF      STATUS, RP0            ; select bank 0
   MOVF   EEDATA, W            ; vrednost lokacije 0x00 EEproma prenešena v W register
   MOVWF   Ure_dela_LOW_BYTE      ; shranjena vrednost se iz Eproma prenese preko W registra v Stevec_1a


Ti vmes še menjaš banko. Mogoče je potrebno, moja koda je za 16F84A.
Sem pa opazil, da podatek v eeprom vpišeš na lokacijo 0x00, bereš jo pa iz 0x22 ter 0x23 je mogoče to narobe?

_________________
If at first you don't succeed, destroy all evidence that you tried.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
jakar
Član
Član



Pridružen-a: Sob 22 Maj 2004 21:34
Prispevkov: 190
Aktiv.: 0.86
Kraj: Primorska

PrispevekObjavljeno: Sob Jan 02, 2010 10:45 pm    Naslov sporočila:   Odgovori s citatom

Citiram:

Ti vmes še menjaš banko. Mogoče je potrebno, moja koda je za 16F84A.

Pri 16f84a ni treba menjati banke, ker imaš v banki 0 register EEDATA. 16F877a pa ima EEDATA v banki 2, podatek_EE imam pa v banki 0, zato vmes skočim v banko 0.
Sem pa dobil hrošča, nikjer v programu nisem pobrisal Registra NASLOV_EE, ki se je nahajal na naslovu 0x22, MPLAB SIM je že imel privzeto vrednost 0x00. V PIC-u je bila pa očitno drugačna vrednost Brick wall

Citiram:
Sem pa opazil, da podatek v eeprom vpišeš na lokacijo 0x00, bereš jo pa iz 0x22 ter 0x23 je mogoče to narobe?

Koda:

NASLOV_EE      EQU   0X22
PODATEK_EE      EQU   0X23

Si mislil ta del? Kolikor sem jaz razumel (sem začetnik asm-ja) s tem definiraš dva prosta registra na naslovih 0x22 in 0x23 ne pa njihove vrednosti.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 19.74

PrispevekObjavljeno: Ned Jan 03, 2010 10:05 am    Naslov sporočila:   Odgovori s citatom

V EEADR vpišeš naslov eeproma, ki ga hočeš prebrat. V tvojem primeru prebereš vrednost na naslovu 0x22 in to zapišeš, kot naslov v EEADR. Problem je, ker te vrednosti nikoli ne nastaviš, torej bo naključna.

V inicializacijo dodaj še "clrf NASLOV_EE", da boš naslov eeproma postavil na 0.
Lahko tudi izpustiš to spremenljivko, saj je ne rabiš (bereš itak vedno iz naslova 0).

_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
dkone
Član
Član



Pridružen-a: Sre 07 Mar 2007 18:53
Prispevkov: 2104
Aktiv.: 10.13
Kraj: Krško

PrispevekObjavljeno: Ned Jan 03, 2010 4:43 pm    Naslov sporočila:   Odgovori s citatom

Število korakov je včasih zavajajoče. Poskusi takole:
Koda:
MEHKI_ZAGON
   CLRF   ZAGON
MehkiZ
   MOVF   ZAGON,W
   MOVWF   CCPR1L         ;NASTAVLJAM ŠIRINO PWM-ja
   CALL   ZAKASNITEV      ;ZAKASNITEV, DA TRAJA POSTAVITEV
   INCF   ZAGON,F         ;PWM-ja OD 0% DO 100% PRIBLIŽNO 2 SEKUNDI
   MOVF   ZAGON,W
   SUBWF   PODATEK_EE,W   ;ALI SEM ŽE DOSEGEL SHRANJENO VREDNOST?
   BTFSS   STATUS,Z
   GOTO   MehkiZ ;$-7
   RETURN

_________________
Denis
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja PIC-a v Assembler-ju Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 48 dni


Powered by phpBB © 2001, 2005 phpBB Group