Sari la conținut
ELFORUM - Forumul electronistilor

BASCOM


Postări Recomandate

  • 2 luni mai târziu...

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
  • 1 lună mai târziu...
Vizitator dmark30

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

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
  • 5 săptămâni mai târziu...

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

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

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

$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
  • 3 săptămâni mai târziu...

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

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum
×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări