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 

Konvertiranje MicroC u Bascom Avr PWM sine wave 50Hz

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
laco
Član
Član



Pridružen-a: Pon 06 Jun 2011 19:32
Prispevkov: 13
Aktiv.: 0.08
Kraj: Hrvatska

PrispevekObjavljeno: Sob Apr 13, 2013 9:21 pm    Naslov sporočila: icon_sad Konvertiranje MicroC u Bascom Avr PWM sine wave 50Hz Odgovori s citatom

Napravio sam konverziju MicroC koda u Bascom Avr za mikrokontroler ATMEGA 16 sa taktom 16MHZ. Trebam pomoć kako prevesti par linija koda iz MicroC-a u Bascom, označene su sa CRVENONOM BOJOM
U privitku prilažem detaljan opis sa MicroC Pro kodom.
[/code]
'*******************************************************************************
'* Programmer: Syed Tahmid Mahbub in MicroC
'* Program Convert to Bascom Avr: Ivica Lacmanovic
'* Target Microcontroller: ATMEGA16
'* Compiler: Bascom AVR 2.0.7.3
'*******************************************************************************
$regfile = "m16def.dat" ' specify the used micro
$crystal = 16000000 ' used crystal frequency
$baud = 19200 ' use baud rate
$hwstack = 128 ' default use 128 for the hardware stac
$swstack = 64 ' default use 64 for the SW stack
$framesize = 64

' variable
'------------------------------
Dim Sin_table(32) As Integer ' Half period Sine wave table 32 segments
Dim Index As Byte

' Config Ports
'------------------------------
Config Portd = Output
Mosa Alias Pind.0 ' #define MOSA PORTD0_bit
Mosb Alias Pind.1 ' #define MOSB PORTD1_bit
Mosc Alias Pind.2 ' #define MOSC PORTD2_bit
Mosd Alias Pind.3 ' #define MOSD PORTD3_bit

For Index = 0 To 31
Sin_table(index + 1) = Lookup(index , Sine_dat) ' Read sine_dat "1 to 32"
Next Index

Dim Flagreg As Byte ' unsigned char FlagReg;
'********************************************************************************
#define Direction Flagreg.b0 'OVU LINIJU NA ZNAM KONVERTIRATI U BASCOM.
'********************************************************************************
' 0 -> MOS A + D
' 1 -> MOS B + C

Dim Tbl_pointer_new As Integer , Tbl_pointer_old As Integer
Dim Tbl_pointer_shift As Integer , Set_freq As Integer
Dim Tbl_temp As Integer
Dim Duty_cycle As Byte

Enable Ovf0
On Ovf0 Timer1_ovf

Do

Set_freq = 410
Tbl_pointer_shift = 0
Tbl_pointer_new = 0
Tbl_pointer_old = 0
Duty_cycle = 0

Ddrc = &B11111111 ' DDRC = 0xFF;
Ddrd = &B11111111 ' DDRD = 0xFF;

Ocr1ah = 0
Ocr1al = 0

Tccr1a = &B10000010 ' TCCR1A = 0x82;
Icr1h = &B00000011 ' ICR1H = 0x03;
Icr1l = &B11100111 ' ICR1l = 0xe7;

' ICR1 = 999 -> TOP -> 16kHz

Timsk = &B00000100 ' Timsk = 0x04;
Tccr1b = &B00011001 ' Tccr1b = 0x19;

'*******************************************************************************

Sreg_i_bit = 1 ' Mogu li je zamijeniti sa Enable Interrupts
'*******************************************************************************
Loop

End ' End Program


'***********************************************Interrupt0**********************
Void Interrupt() Org Ivt_addr_timer1_ovf{
' MOGU LI OVU LINIJU ZAMITI SA Timer1_ovf:
'*******************************************************************************

Tbl_pointer_new = Tbl_pointer_new + Set_freq
If Tbl_pointer_new < Tbl_pointer_old Then
If Direction = 0 Then
Mosa = 0
Mosd = 0
Mosb = 1
Mosc = 1
Direction = 1
Else
Mosb = 0
Mosc = 0
Mosa = 1
Mosd = 1
Direction = 0
End If
End If

Tbl_pointer_shift = Tbl_pointer_new : Shift Tbl_pointer_shift , Right , 11 'TBL_POINTER_SHIFT = TBL_POINTER_NEW >> 11;
Duty_cycle = Tbl_pointer_shift
Tbl_pointer_shift = Sin_table(duty_cycle)

Ocr1ah = Tbl_pointer_shift : Shift Ocr1ah , Right , 8 'OCR1AH = TBL_POINTER_SHIFT >> 8;
Ocr1al = Tbl_pointer_shift And &B00001111 'OCR1AL = TBL_POINTER_SHIFT & 0x0F;

Tbl_pointer_old = Tbl_pointer_new
Return

'************* Sine Table data for 32 samples ****************************
Sine_dat:
Data 0 , 100 , 199 , 296 , 390 , 480 , 566 , 645 , 718 , 783 , 840 , 889 , 928 , 958 , 979 , 989 , 989 , 979 , 958 , 928 , 889 , 840 , 783 , 718 , 645 , 566 , 480 , 390 , 296 , 199 , 100 , 0



Sine Wave Generation with ATMEGA16.pdf
 Opis:

Download
 Ime datoteke:  Sine Wave Generation with ATMEGA16.pdf
 Velikost datoteke:  361.21 KB
 Downloadano:  4 krat


_________________
Lijep pozdrav,
Ivica Lacmanovic
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3641
Aktiv.: 16.01

PrispevekObjavljeno: Ned Apr 14, 2013 1:36 am    Naslov sporočila: icon_sad Re: Konvertiranje MicroC u Bascom Avr PWM sine wave 50Hz Odgovori s citatom

laco je napisal/a:
do

Read-inputs
Measure-ADC
Call-subrutines
Calculate-variables
R/W-EE
Write-lcd
Write-outputs
WaitMs(18)

Loop
Izbaci komplet inicializaciju iz "do - loop", jer inicializira se samo jednom na početku, a do-loop onda radi non stop.

Kad se dogodi Interrupt, program negdje između do i loop prestane, servisira interrupt, a onda ide dalje od tamo, gdje je prije prestao.

_________________
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
laco
Član
Član



Pridružen-a: Pon 06 Jun 2011 19:32
Prispevkov: 13
Aktiv.: 0.08
Kraj: Hrvatska

PrispevekObjavljeno: Pon Apr 15, 2013 2:50 pm    Naslov sporočila: icon_impressed Konvertiranje MicroC u Bascom Avr PWM sine wave 50Hz Odgovori s citatom

Program sam malo preuredio i sad izgleda ovako.
Dobijam na MOSA i MOSC signal koji nije pravilni pravokutnik, dok je signal na MOSB i MOSD u redu.

Molim savjetda li su signali u redu.

Koda:


'***********************************************************************
'* Programmer: Ivica Lacmanovic
'* Target Microcontroller: ATMEGA16
'* Compiler: Bascom AVR
'***********************************************************************

$regfile = "m16def.dat"
$crystal = 16000000
$hwstack = 128
$swstack = 64
$framesize = 64

'Ddrc = &B11111111 not used in code
Ddrd = &B11111111

Mosa Alias Portd.0
Mosb Alias Portd.1
Mosc Alias Portd.2
Mosd Alias Portd.3

Dim Sin_table(32) As Byte                                   ' Sine_table
Dim Index As Byte
Dim Direction As Bit
Dim Tbl_pointer_new As Word , Tbl_pointer_old As Word
Dim Tbl_pointer_shift As Word , Set_freq As Word
Dim Tbl_temp As Word
Dim Duty_cycle As Word

Config Base = 0

For Index = 0 To 31
   Sin_table(index) = Lookup(index , Sine_dat)              ' Read sine_dat
Next Index

Ocr1ah = 0
Ocr1al = 0

Tccr1a = &B10000010
Icr1h = &B00000011
Icr1l = &B11100111
Timsk = &B00000100
Tccr1b = &B00011001

Enable Ovf1
On Ovf1 Timer1_ovf

Set_freq = 410
Tbl_pointer_shift = 0
Tbl_pointer_new = 0
Tbl_pointer_old = 0
Duty_cycle = 0

Enable Interrupts

Do
 !nop
Loop

End

'************************** TIMER1 Overflow ********************************
Timer1_ovf:

 Tbl_pointer_new = Tbl_pointer_new + Set_freq

 If Tbl_pointer_new < Tbl_pointer_old Then
   If Direction = 0 Then
      Reset Mosa
      Reset Mosd
      Set Mosb
      Set Mosc
      Set Direction
   Else
      Reset Mosb
      Reset Mosc
      Set Mosa
      Set Mosd
      Reset Direction
   End If
 End If

 Tbl_pointer_shift = Tbl_pointer_new
 Shift Tbl_pointer_shift , Right , 11
 Duty_cycle = Tbl_pointer_shift
 Tbl_pointer_shift = Sin_table(duty_cycle)

 Ocr1ah = High(tbl_pointer_shift)
 Ocr1al = Low(tbl_pointer_shift)

 Tbl_pointer_old = Tbl_pointer_new
Return


'************ Sine Table data for 32 samples ****************************
Sine_dat:
Data 0 , 100 , 199 , 296 , 390 , 480 , 566 , 645 , 718 , 783 , 840 , 889 , 928 , 958 , 979 , 989
Data 989 , 979 , 958 , 928 , 889 , 840 , 783 , 718 , 645 , 566 , 480 , 390 , 296 , 199 , 100 , 0



Isis Test.jpg
 Opis:
 Velikost datoteke:  90.59 KB
 Pogledana:  7 krat

Isis Test.jpg



Isis Test-1.jpg
 Opis:
 Velikost datoteke:  178.03 KB
 Pogledana:  2 krat

Isis Test-1.jpg



_________________
Lijep pozdrav,
Ivica Lacmanovic
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 -> AVR, LPC900, x51 Č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: 492 dni


Powered by phpBB © 2001, 2005 phpBB Group