Cilibiu Postat Iulie 23, 2012 Partajează Postat Iulie 23, 2012 Da asa e, stiam ca se poate ceva matematic dar numi venea in cap Mersi de ajutor. Link spre comentariu
script22 Postat Octombrie 14, 2012 Partajează Postat Octombrie 14, 2012 ceva ajutor aici se poate nu functioneaza butonu de light si releu folosesc timer 1 ' * - - * - * * - - - - - - - - - - - - - - - - - - - - - - - - - - -'Made by Szymon Dyja'from www.pro-qwerty.com'' * - - * - * * - - - - - - - - - - - - - - - - - - - - - - - - - -$regfile = "m8def.dat"$crystal = 8000000'$sim'$lib "lcd4.lbx"Declare Sub Lover_text()Declare Sub SetclockConfig Pind.0 = InputConfig Pind.1 = InputConfig Pind.2 = InputConfig Pind.3 = InputConfig Pind.4 = InputConfig Pinb.1 = OutputConfig Pinb.2 = OutputConfig Pinb.0 = InputDim C As ByteDim D As ByteDim E As ByteDim Releu As BitDim Light As BitDim Releut As IntegerDim Lightt As IntegerPortd.0 = 1Portd.1 = 1Portd.2 = 1Portd.3 = 1Portd.4 = 1Portb.1 = 0Portb.2 = 0Portb.0 = 1C = 0D = 0E = 0Releut = 0Lightt = 0Dim B As ByteDim A As IntegerDim Secounds As ByteDim Minutes As ByteDim Hours As ByteLet Secounds = 0Let Minutes = 0Let Hours = 0Let A = 0Reset Portb.2Reset Portb.1Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , Rs = Portc.5 , E = Portc.4Config Lcd = 16 * 2Deflcdchar 0 , 32 , 21 , 14 , 4 , 4 , 10 , 17 , 17Deflcdchar 1 , 32 , 4 , 14 , 14 , 14 , 4 , 4 , 4Set Portb.1ClsLcd " www.elforum.info "LowerlineLcd "Code by script22"Wait 3Reset Portb.1Config Timer1 = Timer , Prescale = 1024On Ovf1 Tim1_isrLoad Timer1 , 7812Setclock:Disable InterruptsLet Secounds = 0ClsCursor On BlinkLcd "Time: "LowerlineLcd "Set Clock!"Locate 1 , 9Lcd ":"Locate 1 , 12Lcd "."Do If Pind.1 = 0 Then Minutes = Minutes + 1 If Minutes = 60 Then Minutes = 0 Waitms 200 End If If Pind.0 = 0 Then Hours = Hours + 1 If Hours = 24 Then Hours = 0 Waitms 200 End If If Pind.2 = 0 Then Exit Do Locate 1 , 7 Lcd " " Locate 1 , 7 Lcd Hours Locate 1 , 10 Lcd " " Locate 1 , 10 Lcd Minutes Locate 1 , 13 Lcd " " Locate 1 , 13 Lcd Secounds Waitms 50 If Pind.4 = 0 Then Waitms 3 Light = 1 End If If Pinb.0 = 0 Then Waitms 3 Releu = 1 D = D + 1 End If LoopEnable Timer1Enable InterruptsCursor Off NoblinkCall Lover_text()Do If Pind.4 = 0 Then Waitms 3 Light = 1 End If If Pinb.0 = 0 Then Waitms 3 Releu = 1 D = D + 1 End If LoopTim1_isr: Load Timer1 , 7812 If Secounds = 60 Then Secounds = 0 Minutes = Minutes + 1 If Minutes = 60 Then Minutes = 0 Locate 1 , 10 Lcd " " Hours = Hours + 1 If Hours = 24 Then Hours = 0 Locate 1 , 7 Lcd " " Call Lover_text() nop nop End If End If End If Locate 1 , 7 Lcd Hours Locate 1 , 10 Lcd Minutes Locate 1 , 13 Lcd " " Locate 1 , 13 Lcd Secounds Locate 1 , 16 If A = 0 Then Lcd Chr(0) A = 1 Elseif A = 1 Then Lcd Chr(1) A = 0 End If Secounds = Secounds + 1 If Light = 1 Then Set Portb.1 Lightt = Lightt + 1 Light = 0 End If If Lightt = 240 Then Reset Portb.1 End If If Releu = 1 Then Set Portb.2 Releut = Releut + 1 End If If Releut = 300 Then Reset Portb.2 Releu = 0 End If ReturnEndSub Lover_text() Locate 2 , 0 Lcd " <<- " ; D ; " ->> "End Sub Link spre comentariu
Vizitator dmark30 Postat Noiembrie 17, 2012 Partajează Postat Noiembrie 17, 2012 Salut,As avea si eu o dilema in legatura cu programarea unui AtTiny84: la prima initializare (dupa alimentare) porturile de iesire sunt activate scurt, fapt care imi da peste cap partea analogica pe care o comanda. Sunt sigur ca se poate "dezactiva" acest inconvenient in prima parte a softului, dar nu stiu exact unde, poate cineva cu experienta mai multa ma poate ajuta. Mai jos o parte din cod:$regfile = "attiny84.dat"$crystal = 8000000$hwstack = 100$swstack = 100$framesize = 100Ddra = &B01111110Ddrb = &B0001Er = 0Push_btn Alias Pina.0Buzzer Alias Porta.1Speaker Alias Porta.2Toroidal1 Alias Porta.3 Toroidal2 Alias Porta.4 Fan Alias Ocr1bLed Alias Ocr1aTrigger_in Alias Pina.7Porta.0 = 1Porta.7 = 1Portb.2 = 1Ocr1b = 0Po = 0Master_off = 0Call Beepetc...Andrei Link spre comentariu
nico_2010 Postat Noiembrie 19, 2012 Partajează Postat Noiembrie 19, 2012 Salut, As avea si eu o dilema in legatura cu programarea unui AtTiny84: la prima initializare (dupa alimentare) porturile de iesire sunt activate scurt, fapt care imi da peste cap partea analogica pe care o comanda. Sunt sigur ca se poate "dezactiva" acest inconvenient in prima parte a softului, dar nu stiu exact unde, poate cineva cu experienta mai multa ma poate ajuta. Mai jos o parte din cod: $regfile = "attiny84.dat" $crystal = 8000000 $hwstack = 100 $swstack = 100 $framesize = 100 Ddra = &B01111110 Ddrb = &B0001 Er = 0 Push_btn Alias Pina.0 Buzzer Alias Porta.1 Speaker Alias Porta.2 Toroidal1 Alias Porta.3 Toroidal2 Alias Porta.4 Fan Alias Ocr1b Led Alias Ocr1a Trigger_in Alias Pina.7 Porta.0 = 1 Porta.7 = 1 Portb.2 = 1 Ocr1b = 0 Po = 0 Master_off = 0 Call Beep etc... Andrei Insereaza dupa asta:Ddra = &B01111110 Ddrb = &B0001 aceste 2 comenzi: PORTA=0 PORTB=0 Dupa aceea, poti configura cum doresti butoane (pull-up, pull-down), iesiri (pe 0 logic sau 1 logic) s.a.m.d. Link spre comentariu
script22 Postat Decembrie 18, 2012 Partajează Postat Decembrie 18, 2012 sa spunem ca avem un adc pana la 256 care acea valoare vrem ca fie reprezentata de 192 maxim asta cum se poate face ?? aici e ce am incercat eu si nu functioneaza bine ce alte solutii mai sunt ?? $regfile = "m16def.dat"$crystal = 8000000Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 1'The AUTO feature, will select the highest clockrate possibleConfig Adc = Single , Prescaler = Auto , Reference = Avcc'Now give power to the chipStart Adc'With STOP ADC, you can remove the power from the chip'Stop AdcConfig Portd.5 = OutputDim W As Byte , Channel As ByteDim Y As ByteDim Z As ByteDim M As Word'now read A/D value from channel 0Do W = Getadc(4) Y = 64 For Z = 1 To W M = 192 * W M = M / 256 Next W Y = Y + M Compare1a = YLoopEnd Link spre comentariu
nico_2010 Postat Decembrie 19, 2012 Partajează Postat Decembrie 19, 2012 @script22: programul functioneaza corect. Daca vrei si zecimale trebuie sa definesti altfel variabilele. Link spre comentariu
script22 Postat Decembrie 19, 2012 Partajează Postat Decembrie 19, 2012 da functioneaza corect dar pwm la 255 defapt e la 0 iesirea. acm dupa ce am facut z = 256-y functioneaza cum vroiam. Si pot sa ma laud ca mi-am tras o statie de lipit frumoasa. Link spre comentariu
fubiansky Postat Decembrie 25, 2012 Partajează Postat Decembrie 25, 2012 Salut, Se da: - O bucata ATmega 64 care ruleaza la 8MHz. - O bucata senzor hall Functionare: - Timer2 este setat ca si timer cu baza de 10us, aici "A" este incrementat cu 1 la fiecare 10us. - La fiecare 1 secunda are loc o intrerupere externa primita de la senzorul hall. Problema: Daca am calculat eu bine intr-o secunda valoarea lui "A" ar trebui sa fie 100000. A = B / C A = 1000000us / 10us = 100000 In realitate valoarea lui "A" este 54680. Daca modific baza de timp la 100us valoarea pe care ar trebui sa o obtin este 10000. Real, valoarea lui "A" este 9314. Ajutati-ma si pe mine cu un sfat. Unde am gresit? Multumesc! Link spre comentariu
script22 Postat Decembrie 25, 2012 Partajează Postat Decembrie 25, 2012 Salut, Se da: - O bucata ATmega 64 care ruleaza la 8MHz. - O bucata senzor hall Functionare: - Timer2 este setat ca si timer cu baza de 10us, aici "A" este incrementat cu 1 la fiecare 10us. - La fiecare 1 secunda are loc o intrerupere externa primita de la senzorul hall. Problema: Daca am calculat eu bine intr-o secunda valoarea lui "A" ar trebui sa fie 100000. A = B / C A = 1000000us / 10us = 100000 In realitate valoarea lui "A" este 54680. Daca modific baza de timp la 100us valoarea pe care ar trebui sa o obtin este 10000. Real, valoarea lui "A" este 9314. Ajutati-ma si pe mine cu un sfat. Unde am gresit? Multumesc! poate nu ai definit bine variabilele Link spre comentariu
fubiansky Postat Decembrie 25, 2012 Partajează Postat Decembrie 25, 2012 Sunt definite ca, "long"Ar trebui sa fie totul in regula dar cu toate astea nu functioneaza corect.Sa fie microcontrolerul prea lenes?...ca sa zic asa. Link spre comentariu
iulian2010 Postat Decembrie 25, 2012 Partajează Postat Decembrie 25, 2012 Ce fel de quartz folosesti? Link spre comentariu
fubiansky Postat Decembrie 25, 2012 Partajează Postat Decembrie 25, 2012 Ai mai jos o imagine cu Quartz-ul.Condensatoarele sunt de 22pF. Link spre comentariu
iulian2010 Postat Decembrie 25, 2012 Partajează Postat Decembrie 25, 2012 Posteaza si codul. Link spre comentariu
fubiansky Postat Decembrie 25, 2012 Partajează Postat Decembrie 25, 2012 $regfile "m64def.dat" $crystal = 8000000 $framesize = 40 $hwstack = 32 $swstack = 10 $baud = 4800 Config Timer1 = Pwm , Compare A Pwm = Clear Up , Compare B Pwm = _ Clear Up , Prescale = 1 Enable Timer1 Config Adc = Single , Prescaler = Auto , Reference = Avcc Enable Adc Config Timer0 = Timer , Prescale = 64 Enable Timer0 Config Timer2 = Timer , Prescale = 1 Enable Timer2 Config Int1 = Falling Enable Int1 On Ovf0 Tmr_sub On Ovf2 Cnt_sub On Int1 Thm_sub Dim Cyl_sts As Byte Dim Thm_spd As Word Dim Thm_rpm As Word Dim Thm_out As Single Dim Flm_tmr As Word Dim Flm_adc As Word Dim Flm_out As Single Declare Sub Emg_stp Enable Interrupts'****************************************************************************'* *'**************************************************************************** Flm_tmr = 0 Pwm1a = 0 Pwm1b = 0'****************************************************************************'* Main Program *'**************************************************************************** Do If Flm_tmr => 500 Then Start Adc Flm_adc = Getadc(0) Flm_out = 1024 / Flm_adc Flm_out = Flm_out - 1 Flm_out = 1470 / Flm_out Flm_tmr = 0 Stop Adc Print ; Thm_rpm End If Loop End'****************************************************************************'* Timer sub *'**************************************************************************** Tmr_sub: Timer0 = 131 Incr Flm_tmr Return'****************************************************************************'* Emergency Stop *'**************************************************************************** Sub Emg_stp: Return End Sub'****************************************************************************'* *'**************************************************************************** Cnt_sub: Timer2 = 176 If Cyl_sts = 0 Then Incr Thm_spd End If Return Thm_sub: If Cyl_sts = 0 Then Thm_rpm = Thm_spd Cyl_sts = 1 Thm_spd = 0 Else Cyl_sts = 0 Thm_spd = 0 End If Return[/code] Link spre comentariu
script22 Postat Ianuarie 16, 2013 Partajează Postat Ianuarie 16, 2013 Case 2DoClsIf E > 0 ThenDisable InterruptsCursor On BlinkIf E > 5 ThenE = 0Enable InterruptsCursor Off NoblinkEnd IfSelect Case ECase 1_hour = DCase 2_min = DCase 5_year = DCase 3_month = DCase 4_day = DEnd SelectEnd IfLcd "Time: " ; Time$LowerlineLcd "Date: " ; Date$For A = 1 To 180Incr BWaitms 1Next ALoop Until B = 180 am incercat eu o combiatie de cod dar fara succes tre sa citesc _hour sa il incarc in d dupa d u in incrementez sau decrementez in idea de a modifica ora cum fac asta 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