fagyvezérlő

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

fagyvezérlő

Hozzászólás Szerző: szovhoz »

Csináltam a kerti csap aknájába egy kis vezérlőt.

A lényege hogy ne hagyja lefagyni a csövet ezt egy infra lámpa segítségével csinálja. Megadott hőmérsékletnél bekapcsolja az infrá-t és ha melegszik a hőmérséklet szépen kikapcsolja!

Az infrá-t pwm-el szabályozza.

Az egész szoft nagyon jól működik a kijelzés csak a hiba!
szépem szabályozza pwm-el az infrát. megy a riasztó is nem tud lefagyni így soha a kút.

-2 és 7 fok között vannak ledek egyenként ezek mutatnák a hőfokot.
De az a gond hogy a bejövő adc értéknél akárhogy állítom meg tudom azt csinálni hogy egyszerre világítson két hőfok érték mi a hiba??

Azt szeretném hogy egyenként mutassák.

a program regisztrált 1.11.9.3 ban írtam

Kód: Egész kijelölése

$regfile = "m88def.dat"
$hwstack = 100                                              ' default use 50 for the hardware stack
$swstack = 40                                               'default use 10 for the SW stack
$framesize = 48                                             'default use 48 for the frame spa

'Config Watchdog = 2048
Config Adc = Free , Prescaler = Auto , Reference = Internal
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 1       ' pwm
'ledsor ---------------------------
Config Portd.0 = Output
Config Portd.1 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Config Portd.4 = Output
Config Portb.6 = Output
Config Portb.7 = Output
Config Portd.5 = Output
Config Portd.6 = Output
Config Portd.7 = Output

Led02 Alias Portd.7
Led01 Alias Portd.6
Led0 Alias Portd.5
Led1 Alias Portb.7
Led2 Alias Portb.6
Led3 Alias Portd.4
Led4 Alias Portd.3
Led5 Alias Portd.2
Led6 Alias Portd.1
Led7 Alias Portd.0

'riasztás kimenet------------------
Config Portb.0 = Output                                     ' riaszt led
Config Portb.2 = Output                                     ' riaszt relé
Riasztled Alias Portb.0
Riasztrele Alias Portb.2

'pwm kimenet -------------------
Config Portb.1 = Output
Dim A As Byte
A = 254

' adc csatornák ------------------------------
Dim W As Word , Channel1 As Word                            'akku adc
Channel1 = 4
Dim Z As Word , Channel2 As Word                            ' hő adc
Channel2 = 0
Dim B As Word
Dim D As Word
Dim C As Word



Dim F As Word
F = 0

Declare Sub Akku(byref Channel1 As Word , W As Word )
Declare Sub Homero(byref Channel2 As Word , Z As Word )
Declare Sub Riaszt
Declare Sub Led

' Infra melegítés teszt ---------------------------
Rem a pwm felpörgetés 0% - 100%

For A = 254 To 0 Step -1
Pwm1a = A
Riasztled = 1
Waitms 5
Next A

Waitms 5

For A = 0 To 252 Step 1
Pwm1a = A
Riasztled = 0
Waitms 5
Next A


' Főprogram --------------------------
Do
'Start Watchdog

'Call Akku(channel1 , W)
Call Homero(channel2 , Z)

If Z > 512 Then
For B = 2 To 252 Step 1
If Pwm1a >= 252 Then                                        '  Or Pwm1a <= 2
Exit For
Else
Pwm1a = B
End If
Waitms 5
Next B
End If

Call Led

If Z < 498 Then
For B = 252 To 1 Step -1
If Pwm1a <= 1 Or Pwm1a >= 253 Then
Exit For
Else
Pwm1a = B
End If
Waitms 5
Next B
End If
Call Homero(channel2 , Z)


'Reset Watchdog
Loop


Sub Akku(byref Channel1 As Word , W As Word )               ' adc 1 sub akku
W = 0
W = Getadc(channel1)
If W <= 320 Then
'Call Riaszt
Else
'Riasztrele = 1
End If
End Sub


Sub Homero(byref Channel2 As Word , Z As Word )             ' adc 2 sub  hőmérő
Z = 0
Z = Getadc(channel2)
F = Z
If Z <= 488 Then
'Riasztrele = 0
Call Riaszt
Else
'Riasztrele = 1
riasztled = 0
End If
End Sub


Sub Led
If F > 1 And F < 485 Then Led02 = 1 Else Led02 = 0
Waitms 5
If F > 486 And F < 495 Then Led01 = 1 Else Led01 = 0
waitms 5
If F > 496 And F < 505 Then Led0 = 1 Else Led0 = 0
waitms 5
If F > 506 And F < 515 Then Led1 = 1 Else Led1 = 0
waitms 5
If F > 516 And F < 525 Then Led2 = 1 Else Led2 = 0
waitms 5
If F > 526 And F < 535 Then Led3 = 1 Else Led3 = 0
Waitms 5
If F > 536 And Z < 545 Then Led4 = 1 Else Led4 = 0
waitms 5
If F > 546 And F < 555 Then Led5 = 1 Else Led5 = 0
waitms 5
If F > 566 And F < 575 Then Led6 = 1 Else Led6 = 0
waitms 5
If F > 576 And Z < 1023 Then Led7 = 1 Else Led7 = 0
waitms 5
End Sub

Sub Riaszt
'Riasztled = 0
'Waitms 40
Riasztled = 1
'Waitms 40
End Sub
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Mi a kérdés?


A SubLED sorokat írd át, hogy átfedés legyen a kijelzett LED-ek közt....
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Vannak olyan értékek, amikor a „Sub Led” nem csinál semmit!
Például az első sorban 1-re és 485-re, és így tovább!
Más amíg állandó a hőmérséklet addig villog a led.
De ha átlép a határon, akkor az előzőt otthagyja ahogyan éppen állt!
Ezért marad bekapcsolt leded!

:roll:
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Így próbáld meg átírni:
If F >= 1 And F <= 485 Then
Toggle Led02
Led01 = kiolt
End if
If F >= 486 And F <= 495 Then
Toggle Led01
Led02 = kiolt
Led0 = kiolt
End if
If F >= 496 And F <= 505 Then
Toggle Led0

...
End If
waitms 5
End Sub

:arrow:
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

Hozzászólás Szerző: szovhoz »

A lényeg az hogy ne legyen átfedésem soha! hogy egy foknál az egyfokos led jelezen.

Nem rég jöttem rá hogy ennek a procinak csak 1.1v ref feszültsége van belső de az se pontos mert csak 1.08v!!! :D
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

A 100nF kondi ott van hidegítőnek?
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

Hozzászólás Szerző: szovhoz »

a kondi ott van és nem is izgatja.

próbáltam adc-t free és single-ben is, de nincs változás!

nem tudom mit lehetne tenni, szerintem jó a szoft!?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Mi a kérdés?


Hun-Hun fordítást kérek erre:
"-2 és 7 fok között vannak ledek egyenként ezek mutatnák a hőfokot.
De az a gond hogy a bejövő adc értéknél akárhogy állítom meg tudom azt csinálni hogy egyszerre világítson két hőfok érték mi a hiba?? "
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Ha az előző ötletem nem jöttbe, akkor próbáld így:
If F >= 1 And F <= 485 Then
Portb = 0 ’Először törölsz mindent
Portd = 0
Led02 = 1 ’utána beállítasz
End If
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

Hozzászólás Szerző: szovhoz »

hihihi

:lol:
:lol:

robi:
a hőfokot ledek jelzik egy fok egy led alapon.
és potival próbáltam egyenlőre az adc-t most betettem a hőmérő ic-t is már!
de a probléma még mindíg fenn áll. Mégpedig ami bemegy érték adc-n az alapján ahogyan a szoftban is láttátok behatároltam, hogy melyik lednek mikor kell kigyulladni illetve elaludni. De van hogy egyszerre 3 led is világít!
ez a probléma hogy egyszere max egy db led kelle világítson.

kapu48: a teh általad leírt minden lehetőséget kipróbáltam a toggle parancsa azért nem jó mert villog a led!
ami most írtál utóljára az jutott eszembe nekem is már be ís írtam meg időt is tettem közé. de így se az igazi.

csak ezek a ledek nem azt teszik amit akarok.

ha gyorsan emelkedik a hőmérséklet szépen ugrálnak felfele, de ha lassan akkor van hogy egyszerre 3 led világít!!!

Hogyan lehetséges, hogy pl az adc-n bemegy 500 és világít az a led is ami csak 490 és 499 közt illetve 510 és 519 közt kellene csak. + ami helyesen világít 500 -509 közti ez hogyan lehetséges!?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

ADC értéked nem ugrál?

Én egy sorosporton csak visszaírnám azt az adatot, hogy mennyit is mérek....
A LED szubrutinba a mérés idejére csak betennék egy Waitms 5 helyett egy waitms 100-at. Ha az ADC ugrál, akkor látom.
A Getadc utasítás elé egy start ADC, míg utána egy Stop ADC-t beillesztenék - nem létszükséglet, de nem árt...

Az ADC-n a referencia igaz nincs bekötve a+5Vba?
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

Hozzászólás Szerző: szovhoz »

nics 5 volt kipróbálom a változtatások mit eszközölnek és majd referálok.

addig is köszönöm.
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

Hozzászólás Szerző: szovhoz »

a satart stop nem jó de a 100ms sokat dobot így már jónak tűnik.

ez működő szoft már csak a riasztó relét kell megcsinálnom.

Kód: Egész kijelölése

$regfile = "m88def.dat"
$hwstack = 100                                              ' default use 50 for the hardware stack
$swstack = 40                                               'default use 10 for the SW stack
$framesize = 48                                             'default use 48 for the frame spa

'Config Watchdog = 2048
Config Adc = Free , Prescaler = Auto , Reference = Internal
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 1       ' pwm
'ledsor ---------------------------
Config Portd.0 = Output
Config Portd.1 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Config Portd.4 = Output
Config Portb.6 = Output
Config Portb.7 = Output
Config Portd.5 = Output
Config Portd.6 = Output
Config Portd.7 = Output

Led02 Alias Portd.7
Led01 Alias Portd.6
Led0 Alias Portd.5
Led1 Alias Portb.7
Led2 Alias Portb.6
Led3 Alias Portd.4
Led4 Alias Portd.3
Led5 Alias Portd.2
Led6 Alias Portd.1
Led7 Alias Portd.0


'riasztás kimenet------------------
Config Portb.0 = Output                                     ' riaszt led
Config Portb.2 = Output                                     ' riaszt relé
Riasztled Alias Portb.0
Riasztrele Alias Portb.2

'pwm kimenet -------------------
Config Portb.1 = Output
Dim A As Byte
A = 250

' adc csatornák ------------------------------
Dim W As Word , Channel1 As Word                            'akku adc
Channel1 = 4
Dim Z As Word , Channel2 As Word                            ' hő adc
Channel2 = 0
Dim B As Word
Dim D As Word
Dim C As Word



Dim F As Word
F = 0

Declare Sub Akku(byref Channel1 As Word , W As Word )
Declare Sub Homero(byref Channel2 As Word , Z As Word )
Declare Sub Riaszt
Declare Sub Led

' Infra melegítés teszt ---------------------------
Rem a pwm felpörgetés 0% - 100%

For A = 250 To 6 Step -1
Pwm1a = A
Waitms 5
Next A

Waitms 5

For A = 7 To 250 Step 1
Pwm1a = A
Waitms 5
Next A


' Főprogram --------------------------
Do
'Start Watchdog

'Call Akku(channel1 , W)
Call Homero(channel2 , Z)

If Z > 730 Then
For B = 2 To 250 Step 1
If Pwm1a >= 250 Then                                        '  Or Pwm1a <= 2
Exit For
Else
Pwm1a = B
End If
Waitms 5
Next B
End If

Call Led

If Z < 718 Then
For B = 250 To 1 Step -1
If Pwm1a <= 1 Or Pwm1a >= 251 Then
Exit For
Else
Pwm1a = B
End If
Waitms 5
Next B
End If
Call Homero(channel2 , Z)


'Reset Watchdog
Loop


Sub Akku(byref Channel1 As Word , W As Word )               ' adc 1 sub akku
W = 0
W = Getadc(channel1)
If W <= 320 Then
'Call Riaszt
Else
'Riasztrele = 1
End If
End Sub


Sub Homero(byref Channel2 As Word , Z As Word )             ' adc 2 sub  hőmérő
Z = 0
Z = Getadc(channel2)
If Z <= 488 Then
'Riasztrele = 0
Call Riaszt
Else
'Riasztrele = 1
Riasztled = 0
End If
End Sub


Sub Led
F = Getadc(channel2)
Waitms 100
If F >= 1 And F <= 699 Then

Led01 = 0
Led0 = 0
Led1 = 0
Led2 = 0
Led3 = 0
Led4 = 0
Led5 = 0
Led6 = 0
Led7 = 0

Led02 = 1
Else
Led02 = 0
End If

If F >= 670 And F <= 709 Then
Led02 = 0

Led0 = 0
Led1 = 0
Led2 = 0
Led3 = 0
Led4 = 0
Led5 = 0
Led6 = 0
Led7 = 0

Led01 = 1
Else
Led01 = 0
End If

If F >= 710 And F <= 719 Then
Led02 = 0
Led01 = 0

Led1 = 0
Led2 = 0
Led3 = 0
Led4 = 0
Led5 = 0
Led6 = 0
Led7 = 0

Led0 = 1
Else
Led0 = 0
End If

If F >= 720 And F <= 729 Then
Led02 = 0
Led01 = 0
Led0 = 0

Led2 = 0
Led3 = 0
Led4 = 0
Led5 = 0
Led6 = 0
Led7 = 0

Led1 = 1
Else
Led1 = 0
End If

If F >= 730 And F <= 739 Then
Led02 = 0
Led01 = 0
Led0 = 0
Led1 = 0

Led3 = 0
Led4 = 0
Led5 = 0
Led6 = 0
Led7 = 0

Led2 = 1
Else
Led2 = 0
End If

If F >= 740 And F <= 749 Then
Led02 = 0
Led01 = 0
Led0 = 0
Led1 = 0
Led2 = 0

Led4 = 0
Led5 = 0
Led6 = 0
Led7 = 0

Led3 = 1
Else
Led3 = 0
End If

If F >= 750 And Z <= 759 Then
Led02 = 0
Led01 = 0
Led0 = 0
Led1 = 0
Led2 = 0
Led3 = 0

Led5 = 0
Led6 = 0
Led7 = 0

Led4 = 1
Else
Led4 = 0
End If

If F >= 760 And F <= 769 Then
Led02 = 0
Led01 = 0
Led0 = 0
Led1 = 0
Led2 = 0
Led3 = 0
Led4 = 0

Led6 = 0
Led7 = 0

Led5 = 1
Else
Led5 = 0
End If

If F >= 770 And F <= 779 Then
Led02 = 0
Led01 = 0
Led0 = 0
Led1 = 0
Led2 = 0
Led3 = 0
Led4 = 0
Led5 = 0

Led7 = 0

Led6 = 1
Else
Led6 = 0
End If

If F >= 780 And Z <= 1023 Then
Led02 = 0
Led01 = 0
Led0 = 0
Led1 = 0
Led2 = 0
Led3 = 0
Led4 = 0
Led5 = 0
Led6 = 0

Led7 = 1
Else
Led7 = 0
End If

End Sub

Sub Riaszt
'Riasztled = 0
'Waitms 40
Riasztled = 1
'Waitms 40
End Sub
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Akkor ott az ADC-d eléggé ugrabugrál...
igaz nem 1 MOhm-os potival játszol? A 10k-s hogy viselkedik?
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

Hozzászólás Szerző: szovhoz »

10k volt rajta de mostmár a hőszenzor van fent! MCP9700-at használunk.

de most így tökéletes az egész.
Válasz küldése