Regulator mocy grzałek Bascom AVR

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
piotrekbusek
-
Posty: 1
Rejestracja: 01 lis 2011, 12:02
Lokalizacja: WAWA

Regulator mocy grzałek Bascom AVR

Post autor: piotrekbusek » 01 lis 2011, 12:12

Witam serdecznie

wpadł mi do głowy pomysł na regulator grupowy, moc uzależniona jest od odchyłki temperatury , ale nie wiem, nie mam koncepcji jak zrobić odczyt temperatury tak, żeby był cały czas czytany i wpisywany do aktualnej procedury pracy, myślę o 1Wire(nie jest to konieczność), ale teoretycznie odczyt,żeby był ciągły musi pracować w pętli, w związku z czym nie będzie realizowana procedura,

Czy jest jakiś sposób na to, czy w ogóle według Was poniższy algorytm ma sens ?

W programie brakuje jeszcze wielu rzeczy (programowanie, odczyt lcd itp), ale to będzie później.

A może ktoś wykonał taki regulator temperatury.

Pozdrawiam Piotr



$sim
$regfile = "m48def.dat" ' specify the used micro
$crystal = 8000000


Config Lcd = 16 * 2
Config Portd = Output
Config Portb = Input
Config 1wire = Portb.0












Dim O As Single 'odchyłka do petli głownej
Dim O_1 As Single 'odchyłka do procedur
Dim Regulator As Byte
Dim T As Single
Dim Tzad As Single
Dim Krok As Byte





Triak Alias Pind.1

S1 Alias Pinb.1
S2 Alias Pinb.2
S3 Alias Pinb.3
S4 Alias Pinb.4



Declare Sub Ddisplay
Declare Sub R100
Declare Sub R75
Declare Sub R50
Declare Sub R25
Declare Sub R0
Declare Sub Programowanie
Declare Sub Progr_tzad
Declare Sub Odcz_temp


Tzad = 3 'przykladowa zadana(docelowa będzie czytana z eprom)
T = 0.8 'temperatura bieżąca (docelowo z czujnika temperatury)




'--------głowny algorytm-------------------------------------------------------

Cls

Lcd "praca"

Wait 5

Do

Cls

O = Tzad - T

Reset Triak 'obliczenie odchyłki temperatury

'gdy odchyłka większa od 3 stopni praca regulatora na 100%
'procedurę R100
If O >= 3 Then

Regulator = 100

R100


Elseif O >= 2 And O < 3 Then 'gdy odchyłka pomiędzy 2 a 3 stopnie praca regulatora na 75 %
'poprzez procedurę R75
Regulator = 75

R75


Elseif O >= 1 And O < 2 Then 'gdy odchyłka pomiędzy 1 a 2 stopnie praca regulatora na 50%

Regulator = 50 'poprzez procedurę R50

R50


Elseif O >= 0.4 And O < 1 Then 'gdy odchyłka pomiędzy 0,4 a 1 stopień praca regulatora na 25%
'poprzez procedurę R25
Regulator = 25

R25


Elseif O < 0.4 Then 'gdy odchyłka niższa od 0,4 stopnia regulator wyłączony

Regulator = 0

R0



End If

Ddisplay 'prcedura wyświetlacza


Loop

'---------------Deklaracje procedur---------------------------------------------


Sub Ddisplay
Cls



End Sub



Sub R100 'procedura regulator 100%


Set Triak
Do
O_1 = Tzad - T
Loop Until O_1 < 3
End Sub


Sub R75 'procedura regulator 75%

Do
O_1 = Tzad - T
Set Triak
Waitms 750
Reset Triak
Waitms 250

Loop Until O_1 < 2


End Sub



Sub R50 'procedura regulator 50%

Do

O_1 = Tzad - T
Set Triak
Waitms 500
Reset Triak
Waitms 500

Loop Until O_1 < 1


End Sub


Sub R25 'procedura regulator 25%

Do

O_1 = Tzad - T
Set Triak
Waitms 250
Reset Triak
Waitms 750

Loop Until O_1 < 0.4


End Sub



Sub R0 'procedura regulator 0%

Do

O_1 = Tzad - T
Reset Triak

Loop Until O_1 <= 0.4

keruseykaryu

Post autor: keruseykaryu » 01 lis 2011, 17:40

Gdzie przerwania masz z sieci, by się synchornizować z siecią? Regulacja czy kątowa czy grupowa to przecież tego nie ominiesz.
A z OneWire to problem jest przecież żaden. Wysyłasz tylko polecenie by czujnik zrobił pomiar a program może ciągnąć swoje zadania dalej. Jak upłynie te 750ms to czytasz zawartość czujnika i wysyłasz kolene polecenie. I tak w koło.
Po prostu nie czekaj na czujnik, on swoje zrobi zapisze sobie i się wyłączy. Jak będzie czas to go odczytasz i dasz kolejny sygnał by nieco popracował.

No i na przyszłość kody wal w tagi bo czytać takie coś to nie skoro.

ODPOWIEDZ