Hallo iedereen
Ik heb het volgende project dat we met 4 elektronica studenten gaan uitwerken een bodediagram plotter met microcontroller.
Ik neem mijn verantwoordelijkheid tot de firmware.
Ik werk met de PIC18F2550, met een kristal van 20MHz.
De print is bijna afgewerkt enkel nog zien als ik die MUX kan gebruiken.
Ik probeer via EasyPIC5 board mijn PIC en neen hij werkt dus niet en nochtans een nieuwe, moet aan de config bits liggen
Vraag 1
=====
- Hoe stel ik die config bits in opdat hij zal werken met dat kristal? Heeft iemand als met die PIC18F2550/4550/2450/4450 gewerkt?
Vraag 2
=====
Ik heb het volgende algoritme dat mijn bodediagram plotter moet uitvoeren:
STAP 1
=====
Ik ga via het SPI protocol digitaal de frequentie instellen dus wat ik eerst doe is het control register eenmalig initialiseren en dan 4 bytes versturen van de PIC naar de DDS
STAP 2
=====
Vervolgens ga ik twee analoge waarden inlezen Vin en Vout via de interne ADC van de microcontroller en opslaan in twee variabelen Din en Dout. Ik maak gebruik van 10 bits ADC en de reference spanning van 5V van de PIC en maak gebruik van de ingebouwde functie ADC_Read(channel)
STAP 3
=====
De opgeslagen waarden Din en Dout zal ik via serial communicatie met de ingebouwde functies USART_Write() sturen naar de PC met een vertraging denk ik. De raw data wordt gans bewerkt door mijn labpartner.
STAP 4
=====
Ook moet het mogelijk zijn om data die de gebruiker van de PC naar de PIC verstuurd via de serial port dan weer met ingebouwde commandos USART_Data_Ready() en USART_Read()
Kan ik hier gebruik maken van interrupts?. Wanneer kan je zeggen nu is een interrupt noodzakelijk want daar kom ik niet uit
Ik weet grofweg niet wanneer ik hier interrupts kan gebruiken?
Ik werkt met mikroC en heeft een gereserveerd woord interrupt()
Hoe ik de code kan schrijven doe ik zo:
void main()
{
init_mcu();
init_dds();
while(1);
of moet ik dat zo doen:
while(1)
{
functies aanroepen?
}
}
interrupt()
{
Welke stappen moet ik hier zeker volgen bij het werken van interrupts?
}
Ik ben overtuigd dat iemand mij hier op weg kan helpen
Met vriendelijke groet
Interrupts met een PIC
-
- Berichten: 11
- Lid geworden op: ma 6 apr 2009, 15:33
- Locatie: GENT
- Stynus
- Site Admin
- Berichten: 5910
- Lid geworden op: vr 16 mei 2003, 20:45
- Locatie: Overpelt (België)
- Contacteer:
Hoeveel topics ga je hier nu nog over openen? Graag alles in 1 topic houden !!
Ik zal de rest op slot doen dan gaan we hier verder
Vraag 1 : zie datasheet
Vraag 2 : Dat ligt er juist aan wat het precies moet doen.
Ik zal de rest op slot doen dan gaan we hier verder
Vraag 1 : zie datasheet
Vraag 2 : Dat ligt er juist aan wat het precies moet doen.
Met vriendelijke groet,
Stynus
http://www.elektronicastynus.be
--> Elektronica bouwpakketten en componenten te koop. <--
Stynus
http://www.elektronicastynus.be
--> Elektronica bouwpakketten en componenten te koop. <--
-
- Berichten: 11
- Lid geworden op: ma 6 apr 2009, 15:33
- Locatie: GENT
Stijn,
Bij vraag 1 voor het instellen van die config bits staat dat nergens in heb die datasheet al 4 keer gelezen en vind nergens de default instelling
Bij vraag 2 is dat het juiste algoritme die moet opgevolgd worden.
Waar zou ik nu interrupts gaan inzetten, zeker niet bij SPI want dat is niet nodig, en bij de USART voor RX en TX en inlezen in de ADC?
Die mails dat ik je hebt verstuurt gaat over die flowcharts van die DDS chip maar lees dat eerst rustig door en gaat bijzonder leuk vinden dat je die flowcharts in code kan omzetten mag basic zijn want dat is me nog niet gelukt
Mij nog steeds blindstaren op die twee algoritmes die in de datasheet staan en vraag mij af heb ik ze wel nodig?
Bij vraag 1 voor het instellen van die config bits staat dat nergens in heb die datasheet al 4 keer gelezen en vind nergens de default instelling
Bij vraag 2 is dat het juiste algoritme die moet opgevolgd worden.
Waar zou ik nu interrupts gaan inzetten, zeker niet bij SPI want dat is niet nodig, en bij de USART voor RX en TX en inlezen in de ADC?
Die mails dat ik je hebt verstuurt gaat over die flowcharts van die DDS chip maar lees dat eerst rustig door en gaat bijzonder leuk vinden dat je die flowcharts in code kan omzetten mag basic zijn want dat is me nog niet gelukt
Mij nog steeds blindstaren op die twee algoritmes die in de datasheet staan en vraag mij af heb ik ze wel nodig?
- Stynus
- Site Admin
- Berichten: 5910
- Lid geworden op: vr 16 mei 2003, 20:45
- Locatie: Overpelt (België)
- Contacteer:
p23 van de datasheet staan de fuses van de oscilator toch :s.
En ik ga die code echt niet voor je maken. Dit is een school opdracht van je. Het gaat erom dat je zelf wat bijleert. Als je je code af hebt en ze werkt niet kan ik wel eens kijken voor je waarom. Maar aangezien je in C werkt geef ik het weinig kans dat ik de fout dan ga vinden.
En ik ga die code echt niet voor je maken. Dit is een school opdracht van je. Het gaat erom dat je zelf wat bijleert. Als je je code af hebt en ze werkt niet kan ik wel eens kijken voor je waarom. Maar aangezien je in C werkt geef ik het weinig kans dat ik de fout dan ga vinden.
Met vriendelijke groet,
Stynus
http://www.elektronicastynus.be
--> Elektronica bouwpakketten en componenten te koop. <--
Stynus
http://www.elektronicastynus.be
--> Elektronica bouwpakketten en componenten te koop. <--
-
- Berichten: 11
- Lid geworden op: ma 6 apr 2009, 15:33
- Locatie: GENT
Heb hier code gevonden in PIC basic voor sturing van DDS
Hallo stijn en mat,
Zou ik die code kunnen gebruiken dus met andere woorden is die volledig voor de besturing van de AD9833 heb dat van een site van Mikroelektronika gehaald
Zou ik dat best testen met drukknopjes om te zien als het werkt kan niks zien met een KSO want die is defect.
Wat zou het kunnen zijn als de lichtstip van mijn KSO maar halverwege een terugslag heeft hopelijk niet de afbuigspoelen hoop ik
Zou ik die code kunnen gebruiken dus met andere woorden is die volledig voor de besturing van de AD9833 heb dat van een site van Mikroelektronika gehaald
Code: Selecteer alles
Device = 16F877
XTAL = 20
Symbol DPin PORTC.4 'Data port DDS 1
Symbol CPin = PORTC.3 'Clock port DDS 1
Symbol DDS_CE1 = PORTC.2 'Chip Enble DDS 1
Symbol DDS_CE2 = PORTC.1 'Chip Enble DDS 2
Output DDS_CE1 'Sets Pin to an Output
Output DDS_CE2 'Sets Pin to an Output
Dim Frequency As DWord 'Desired Frequency
Dim DDS_OP As Float 'DDS Output
Dim FTW As DWord 'Frequency Tunning word
Dim FTWLSB As FTW.WORD0 'First word LSB of the Frequency tuning word
Dim FTWMSB As FTW.WORD1 'Second word MSB of the Frequency tuning word
Dim FTWLSB1 As Word '
Dim DDS_Chip As Byte 'Selects DDS chip DDS1 = 1, DDS2 = 2
Dim DDS_Waveform As Byte 'Select Waveforms Type Sine = 1, Triangle = 2, Square = 3 (TTL)
Dim DDS_Control_Register As Word
Dim Freq_Reg As Bit 'Selects Frequency Register REG0 or REG1
Dim var1 As Byte
Dim key As Byte
'KEYPAD_PORT PORTB
Include "proton_4.inc"
Cls
'Initialise DDS1
DDS_CE1 = 0 'Activate DDS (Set Chip Enable Low)
SHOut DPin, CPin, 5, [$2100\16] 'Apply Reset
SHOut DPin, CPin, 5, [$2000\16] 'Remove reset
DDS_CE1 = 1 'Disable DDS (Set Chip Enable High)
'Initialise DDS2
DDS_CE2 = 0 'Activate DDS (Set Chip Enable Low)
SHOut DPin, CPin, 5, [$2100\16] 'Apply Reset
SHOut DPin, CPin, 5, [$2000\16] 'Remove reset
DDS_CE2 = 1 'Disable DDS (Set Chip Enable High)
DDS_Control_Register = $2100
DDS_Chip = 1
Loop:
key = ""
var1 = InKey
key = LookUp var1,["1","2","3","A","4","5","6","B","7","8","9","C","*","0","#","D"]
Print At; 1, 1, key,
Select key
Case "1"
Print At; 1, 6, "Button 1"
Frequency = 1000 'Sets Desired Output Frequency
DDS_Waveform = 1 'Sets waveform type
Freq_Reg = 0 'Point to which register
DDS_Chip = 2 'DDS Chip 1
GoSub FTW_CALC:
Case "2"
Print At; 1, 6, "Button 2"
Frequency = 2000 'Sets Desired Output Frequency
DDS_Waveform = 1 'Sets waveform type
Freq_Reg = 0 'Point to which register
DDS_Chip = 2 'DDS Chip 1
GoSub FTW_CALC
Case "3"
Print At; 1, 6, "Button 3"
Frequency = 1000 'Sets Desired Output Frequency
DDS_Waveform = 1 'Sets waveform type
Freq_Reg = 1 'Point to which register
DDS_Chip = 2 'DDS Chip 1
GoSub FTW_CALC
Case "4"
Print At; 1, 6, "Button 4"
Frequency = 2000 'Sets Desired Output Frequency
DDS_Waveform = 1 'Sets waveform type
Freq_Reg = 1 'Point to which register
DDS_Chip = 2 'DDS Chip 1
GoSub FTW_CALC
Case "5"
Print At; 1, 6, "Button 5"
Frequency = 1000 'Sets Desired Output Frequency
DDS_Waveform = 3 'Sets waveform type
Freq_Reg = 1 'Point to which register
DDS_Chip = 2 'DDS Chip 2
GoSub FTW_CALC
Case "6"
Print At; 1, 6, "Button 6"
Frequency = 1000 'Sets Desired Output Frequency
DDS_Waveform = 1 'Sets waveform type
Freq_Reg = 1 'Point to which register
DDS_Chip = 2 'DDS Chip 2
GoSub FTW_CALC
Case "7"
Print At; 1, 6, "Button 7"
Frequency = 2000 'Sets Desired Output Frequency
DDS_Waveform = 1 'Sets waveform type
Freq_Reg = 1 'Point to which register
DDS_Chip = 2 'DDS Chip 2
GoSub FTW_CALC
Case "8"
Print At; 1, 6, "Button 8"
Frequency = 2500 'Sets Desired Output Frequency
DDS_Waveform = 2 'Sets waveform type
Freq_Reg = 1 'Point to which register
DDS_Chip = 2 'DDS Chip 2
GoSub FTW_CALC
Case "9"
Print At; 1, 6, "Button 9"
Case "0"
Print At; 1, 6, "Button 0"
Case "A"
Print At; 1, 6, "Button A"
Case "B"
Print At; 1, 6, "Button B"
Case "C"
Print At; 1, 6, "Button C"
Case "D"
Print At; 1, 6, "Button D"
Case "*"
Print At; 1, 6, "Button *"
Case "#"
Print At; 1, 6, "Button #"
Case Else
Cls
Print At; 2, 1, "No Button Press"
RSOut "hello"
EndSelect
GoTo loop
FTW_CALC: 'Calculates Frequency tuning words
DDS_OP = Frequency / 0.03725290298 'Equation to produce DDS tuning word Master CLK / 2pwr28
'Extract LSB Tuning Word
FTW = DDS_OP 'DDS_OP (Float) = Freq tuning word (Dword) << bit shift doesn't work with float
FTWLSB1 = FTWLSB 'Extract LSB and put it in LSB1
'Extract MSB tuning word
FTW = FTW << 2 'Shift Bits Left twice
ProgrammeDDS:
Select Freq_Reg
Case 0
FTWLSB1 0.15 = 0 'Set LSB bit 15 & 14 to 01 (Code to write to DDS Freq Reg 0)
FTWLSB1 0.14 = 1
FTWMSB 0.15 = 0 'Set MSB bit 15 & 14 to 01 (Code to write to DDS Freq Reg 0)
FTWMSB 0.14 = 1
DDS_Control_Register 0.11 = 0 ' Tells DDS to use Frequency Register 0
Case 1
FTWLSB1 0.15 = 1 'Set LSB bit 15 & 14 to 10 (Code to write to DDS Freq Reg 1)
FTWLSB1 0.14 = 0
FTWMSB 0.15 = 1 'Set MSB bit 15 & 14 to 10 (Code to write to DDS Freq Reg 1)
FTWMSB 0.14 = 0
DDS_Control_Register 0.11 = 1 ' Tells DDS to use Frequency Register 1
EndSelect
Select DDS_Waveform 'Sets the control register code to produce coressponding waveforms
Case 1 'Sine
DDS_Control_Register 0.5 = 0: DDS_Control_Register 0.1 = 0
Case 2 'Triangle
DDS_Control_Register 0.5 = 0: DDS_Control_Register 0.1 = 1
Case 3 'Square
DDS_Control_Register 0.5 = 1: DDS_Control_Register 0.1 = 0: DDS_Control_Register 0.3 = 1
EndSelect
Select DDS_Chip
Case 1 'Programmes DDS 1
DDS_CE1 = 0 'Activate DDS (Set Chip Enable Low)
SHOut DPin, CPin, 5, [FTWLSB1\16] 'Set Frequency
SHOut DPin, CPin, 5, [FTWMSB\16]
DDS_Control_Register 0.8 = 0 'Removes reset from DDS chip
SHOut DPin, CPin, 5, [DDS_Control_Register\16] 'Writes to Control Register removing reset
DDS_CE1 = 1 'Disable DDS (Set Chip Enable High)
Case 2 'Programmes DDS 2
DDS_CE2 = 0 'Activate DDS (Set Chip Enable Low)
SHOut DPin, CPin, 5, [FTWLSB1\16] 'Set Frequency
SHOut DPin, CPin, 5, [FTWMSB\16]
DDS_Control_Register 0.8 = 0 'Removes reset from DDS chip
SHOut DPin, CPin, 5, [DDS_Control_Register\16] 'Writes to Control Register removing reset
DDS_CE2 = 1 'Disable DDS (Set Chip Enable High)
EndSelect
GoTo loop
End
Wat zou het kunnen zijn als de lichtstip van mijn KSO maar halverwege een terugslag heeft hopelijk niet de afbuigspoelen hoop ik