| Author |
Message
|
arktik1 Poziom 21

Joined: 07 Nov 2006 Posts: 1154 Location: Piaseczno
|
#1
09 Jun 2009 12:11 Prośba o prosty programik (BASCOM) M16 |
|
|
|
Witam
Chciał bym prosić o napisanie prostego programiku który na wyświetlaczu LCD przesuwał by np literę o 5 miejsc do przodu i z powrotem .
Czyli po kolei po naciśnięciu przycisku.
Naciskamy przycisk 1 miejsce do przodu ,następne przyciśnięcie ,następne miejsce do przodu.
gdy dojdzie do 5 to samo tylko do tyłu.
|
|
| Back to top |
|
 |
Google

|
#
09 Jun 2009 12:11 |
|
|
|
|
|
| Back to top |
|
 |
wader_669 Poziom 22

Joined: 21 Nov 2003 Posts: 1534 Location: Kanalizacja poznania
|
#2
09 Jun 2009 12:37 Re: Prośba o prosty programik (BASCOM) M16 |
|
|
|
zapoznac sie z poleceniem shift albo shift lcd.
|
|
| Back to top |
|
 |
arktik1 Poziom 21

Joined: 07 Nov 2006 Posts: 1154 Location: Piaseczno
|
#3
09 Jun 2009 13:06 Re: Prośba o prosty programik (BASCOM) M16 |
|
|
|
No właśnie próbowałem tak:
| Code: |
If Pind.7 = 0 Then
Wait 1
For A = 1 To 10
Shiftlcd Right
Waitms 500
End If
Next
|
Ale to źle działa.
|
|
| Back to top |
|
 |
hose2 Poziom 12

Joined: 14 Dec 2007 Posts: 105 Location: -) Tak, miasto.
|
#4
09 Jun 2009 13:29 Re: Prośba o prosty programik (BASCOM) M16 |
|
|
|
| arktik1 wrote: |
No właśnie próbowałem tak:
| Code: |
If Pind.7 = 0 Then
Wait 1
For A = 1 To 10
Shiftlcd Right
Waitms 500
End If
Next
|
Ale to źle działa. |
Źle działa i źle wygląda. Jeśli zaczynasz warunek (IF) a w jego wnętrzu masz pętlę (FOR) to musisz najpierw zamknąć pętlę (NEXT) a później warunek (END IF).
Zakładając, że chcesz zrealizować ten pomysł przesuwaniem zawartości wyświetlacza, zacznij od napisania na LCD literki, rozpocznij pętlę (chcesz 5 powtórzeń), następnie czekaj na wciśnięcie klawisza. Jeśli warunek spełniony to przesuń zawartość LCD w prawo. Wstaw opóźnienie, zamknij pętlę ("w prawo"). Rozpocznij pętlę ("w lewo") i kontynuuj, zmieniając kierunek przesuwania, jak dla "w prawo".
To tak najprościej jak się dało nie podając gotowca na talerzu ;)
|
|
| Back to top |
|
 |
arktik1 Poziom 21

Joined: 07 Nov 2006 Posts: 1154 Location: Piaseczno
|
#5
09 Jun 2009 18:52 Re: Prośba o prosty programik (BASCOM) M16 |
|
|
|
A nie można jakoś tego napisać bez poleceń WAIT.
Ma to być dołożone do większego programu i przydało by się żeby nie było WAIT i przesuwania całego LCD tylko te 5 punktów.
Dodam że zamiast litery będzie to strzałka.
Wiem że trzeba coś napisać na LCD i jeszcze LOCATE.:D
Chodzi o sam "kawałek" przesuwający po wciśnięciu przycisku.
Potrzebny po prostu biegnący punkt na LCD inicjowany "przyciskiem"
Dodano po 4 [godziny] 54 [minuty]:
Mam rozumieć że się nie da??
|
|
| Back to top |
|
 |
janbernat Poziom 23

Joined: 22 Oct 2008 Posts: 3913 Location: Warszawa
|
#6
09 Jun 2009 20:00 Re: Prośba o prosty programik (BASCOM) M16 |
|
|
|
Jak nie chcesz wait(co zrozumiałe) to wykorzystaj przerwanie od timera.
|
|
| Back to top |
|
 |
arktik1 Poziom 21

Joined: 07 Nov 2006 Posts: 1154 Location: Piaseczno
|
#7
09 Jun 2009 20:43 Re: Prośba o prosty programik (BASCOM) M16 |
|
|
|
Wszystko dobrze.
Wiem że można tylko 1 problemik.
JAK????
|
|
| Back to top |
|
 |
janbernat Poziom 23

Joined: 22 Oct 2008 Posts: 3913 Location: Warszawa
|
#8
09 Jun 2009 21:03 Re: Prośba o prosty programik (BASCOM) M16 |
|
|
|
"a to być dołożone do większego programu i przydało by się żeby nie było WAIT i przesuwania całego LCD tylko te 5 punktów."
A w tym większym programie masz wolne timery?
Albo chociaż wolne rejestry COMPARE?
|
|
| Back to top |
|
 |
arktik1 Poziom 21

Joined: 07 Nov 2006 Posts: 1154 Location: Piaseczno
|
#9
09 Jun 2009 22:18 Re: Prośba o prosty programik (BASCOM) M16 |
|
|
|
Są wolne 2 liczniki z 3.
Są to 2 proste programy Termometr i Woltomierz.
|
|
| Back to top |
|
 |
Google

|
#
09 Jun 2009 22:18 |
|
|
|
|
|
| Back to top |
|
 |
wader_669 Poziom 22

Joined: 21 Nov 2003 Posts: 1534 Location: Kanalizacja poznania
|
#10
09 Jun 2009 23:04 Re: Prośba o prosty programik (BASCOM) M16 |
|
|
|
| Code: |
'******* procek *******
$regfile = "m32def.dat"
$crystal = 8000000
$hwstack = 50
$swstack = 50
$framesize = 50
'******* lcd *******
Config Lcd = 24 * 2
Config Lcdpin = Pin , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5 , E = Porta.1 , Rs = Porta.0
Dim Menu As Byte
'****** przycisk ******
Config Pinb.2 = Input
Set Portb.2
Declare Sub Przycisk
Dim Przycisk_x As Bit
Dim x As Byte
Cursor Off
Cls
Locate 1 , 13
Lcd "X"
Do
Call Przycisk
If przycisk_x = 1 Then
przycisk_x=0
If X < 5 Then
Shiftlcd Left
incr x
Elseif X > 4 Then
Shiftlcd Right
incr x
if x=9 then x=0
End If
End If
Loop
End
Sub Przycisk
If Pinb.2 = 0 Then
Waitms 45
If Pinb.2 = 0 Then
Bitwait Pinb.2 , Set
przycisk_X = 1
End If
End If
End Sub
|
Dodano po 7 [minuty]:
jak bedzie mi sie chcialo (zaraz sie zastanowie) to ci napisze to bez waitow
|
|
| Back to top |
|
 |
adass Poziom 20

Joined: 28 Apr 2003 Posts: 971 Location: ''-''
|
#11
09 Jun 2009 23:48 Re: Prośba o prosty programik (BASCOM) M16 |
|
|
|
Działa ten program ok . Moje pytanie jak i co dopisać do tego programu żeby masa do R/W (pin PA6) była podawana programowo ,żeby nie trzeba było mostkować R/W do masy. Czy w bascomie to można zrobić ?
|
|
| Back to top |
|
 |
hose2 Poziom 12

Joined: 14 Dec 2007 Posts: 105 Location: -) Tak, miasto.
|
#12
10 Jun 2009 00:06 Re: Prośba o prosty programik (BASCOM) M16 |
|
|
|
Kilka pytań:
- czy pętla główna programu często się powtarza (odświeżanie LCD, odpytywanie klawisza),
- czy chcesz coś pisać na wyświetlaczu podczas animacji (wspólny bufor zawartości LCD),
- czy klawisz ma tą animację tylko uruchamiać, czy również zatrzymywać
Napisz o szczegółach, mniej się będziesz męczył :)
|
|
| Back to top |
|
 |
wader_669 Poziom 22

Joined: 21 Nov 2003 Posts: 1534 Location: Kanalizacja poznania
|
#13
10 Jun 2009 00:46 Re: Prośba o prosty programik (BASCOM) M16 |
|
|
|
| adass wrote: |
| Działa ten program ok . Moje pytanie jak i co dopisać do tego programu żeby masa do R/W (pin PA6) była podawana programowo ,żeby nie trzeba było mostkować R/W do masy. Czy w bascomie to można zrobić ? |
Nie jest to mozliwe.
A tak na powaznie, to moze reset/set portx.x ?
|
|
| Back to top |
|
 |
arktik1 Poziom 21

Joined: 07 Nov 2006 Posts: 1154 Location: Piaseczno
|
#14
10 Jun 2009 15:37 Re: Prośba o prosty programik (BASCOM) M16 |
|
|
|
Jest to wyświetlacz 4x20
Wyświetlane są na nim Temp.V. ,2 czy 3 napisy.
Dlatego ważne jest by strzałka poruszała się w określonym polu np.
Locate 4 ,10 do 4 ,15
Nie można przesuwać całego LCD.
Ma być to czujnik ruchu.
po naciśnięciu przycisku strzałka ma przeskoczyć o 1 pole i czekać na następne naciśnięcie.
Czujnikiem jest fototranzystor więc działa jak przycisk pozycja 1,0,1,0.
z resztą chyba można zastosować DEBOUNCE .
Tylko że wtedy skok będzie powodował opóźnienie.
Może DEBOUNCE=0 wtedy działanie będzie szybsze co w dalszym ciągu nie rozwiązuje sprawy "skoku"
Dodano po 18 [minuty]:
Jakby interesowało to jest tu cały program do którego ma to być dopisane.
Zdaję sobie sprawę że na pewno trzeba go jeszcze poprawić, w każdym razie działa.
:D
| Code: |
$regfile = "m16def.dat"
$crystal = 10000000
Config Porta = Input
Porta = &B1111110
Config Portc = Output
Portc = &B00000000
Config Portd = Input
Portd = &B11111111
Config Lcd = 20 * 2
Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.4 , Rs = Portb.5
Portb.6 = 1
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Dim I As Word
Config Timer1 = Timer , Prescale = 8
On Timer1 Times
Enable Timer1
Enable Interrupts
Dim V As Single
Dim A As Single
Dim P As Integer
Dim C As Integer
Dim R As Integer
Dim Z As Byte
Start Adc
Start:
P = 0
V = 0
A = 0
C = 0
R = 0
Z = 0
Deflcdchar 1 , 32 , 32 , 31 , 31 , 31 , 31 , 32 , 32 'miernik plynu
'------------------------------temp-------------------
Config 1wire = Porta.1
Deflcdchar 0 , 8 , 20 , 11 , 4 , 4 , 4 , 3 , 32 'znak stopnia Celcjusza
Dim Temp As Integer , Ss As String * 6
Dim Dsid As Byte
Cls
Do
Cursor Off
If I = 0 Then Gosub Plyn
'-----------------------napiecie
'----pobieranie
For Z = 1 To 10
P = P + Getadc(0)
Next T
P = P / 10
V = P / 80
A = Frac(v)
V = Int(v)
A = A * 10
R = Int(a) + 10
C = V
Locate 1 , 1
Lcd " Went."
Locate 2 , 1
Lcd "V = "
Lcd C
Lcd R
If V >= 10 Then
Locate 2 , 7
Lcd "."
Locate 2 , 9
Lcd "0"
End If
If V < 10 Then
Locate 2 , 6
Lcd "."
Locate 2 , 8
Lcd "0 "
End If
'---------------------temp
1wreset
1wwrite &H55
1wverify Dsid
1wwrite &HBE
Temp = 1wread(2)
1wreset
1wwrite &HCC
1wwrite &H44
Temp = Temp * 10
Temp = Temp / 16
Ss = Str(temp)
Ss = Format(ss , "0.0")
Locate 1 , 7
Lcd "Temp.Plynu"
Locate 2 , 12
Lcd ; Ss ; Chr(0)
If Temp >= 330 Then 'TEMP WLACZENIA 1 BIEGU
Portc.0 = 1
End If
If Temp <= 320 Then 'WYLACZENIA 1 BIEGU
Portc.0 = 0
End If
If Temp >= 340 Then 'WLACZENIE 2 BIEGU
Portc.1 = 1
End If
If Temp <= 320 Then 'WYLACZENIE 2 BIEGU
Portc.1 = 0
End If
If Temp >= 350 Then 'wlaczenie 3 bieg
Portc.2 = 1
End If
If Temp <= 320 Then 'wylaczenie 3 bieg
Portc.2 = 0
End If
Loop
End
Plyn:
'-----------------poziom wys
Locate 4 , 1
Lcd "E"
Locate 4 , 7
Lcd "F "
Portc.5 = 1
Waitms 100
If Pind.2 = 0 Then
Locate 4 , 2
Lcd Chr(1)
End If
If Pind.2 = 1 Then
Locate 4 , 2
Lcd " "
End If
If Pind.3 = 0 Then
Locate 4 , 3
Lcd Chr(1)
End If
If Pind.3 = 1 Then
Locate 4 , 3
Lcd " "
End If
If Pind.4 = 0 Then
Locate 4 , 4
Lcd Chr(1)
End If
If Pind.4 = 1 Then
Locate 4 , 4
Lcd " "
End If
If Pind.5 = 0 Then
Locate 4 , 5
Lcd Chr(1)
End If
If Pind.5 = 1 Then
Locate 4 , 5
Lcd " "
End If
If Pind.6 = 0 Then
Locate 4 , 6
Lcd Chr(1)
End If
If Pind.6 = 1 Then
Locate 4 , 6
Lcd " "
End If
Portc.5 = 0
If Pind.3 = 1 Then
Locate 3 , 1
Lcd "Malo plynu"
End If
If Pind.3 = 0 Then
Locate 3 , 1
Lcd "Poziom "
End If
If Pind.2 = 0 Then Portc.4 = 0
If Pind.2 = 1 And Pind.3 = 1 Then Gosub Alarm
Return
Times:
I = I + 1
If I = 300 Then
Stop Timer1
I = 0
Timer1 = 0
Start Timer1
End If
Return
Alarm:
Portc.4 = 1
Locate 3 , 1
Lcd " MALO "
Locate 4 , 1
Lcd " PLYNU "
Return
|
Dodano po 4 [godziny] 30 [minuty]:
Dorobiłem coś takiego i o dziwo działa.
tylko może da się to jakoś skrócić??
Bo muszę jeszcze dopisać powrót ,a to znów zajmie tyle samo linijek.
:D
| Code: |
$regfile = "m16def.dat"
$crystal = 10000000
Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.4 , Rs = Portb.5
Config Portd = Input
Portd = &B11111111
Dim L1 As Byte
L1 = 0
Config Debounce = 0
Cls
Do
Debounce Pind.7 , 0 , Zwieksz , Sub
Loop
End
Zwieksz:
Incr L1
If L1 = 5 Then L1 = 0
If L1 = 0 Then
Locate 1 , 1
Lcd "l"
End If
If L1 = 0 Then
Locate 1 , 5
Lcd " "
End If
If L1 = 1 Then
Locate 1 , 2
Lcd "1"
End If
If L1 = 1 Then
Locate 1 , 1
Lcd " "
End If
If L1 = 2 Then
Locate 1 , 3
Lcd "1"
End If
If L1 = 2 Then
Locate 1 , 2
Lcd " "
End If
If L1 = 3 Then
Locate 1 , 4
Lcd "1"
End If
If L1 = 3 Then
Locate 1 , 3
Lcd " "
End If
If L1 = 4 Then
Locate 1 , 5
Lcd "1"
End If
If L1 = 4 Then
Locate 1 , 4
Lcd " "
End If
Return
|
|
|
| Back to top |
|
 |
Google

|
#
10 Jun 2009 15:37 |
|
|
|
|
|
| Back to top |
|
 |
hose2 Poziom 12

Joined: 14 Dec 2007 Posts: 105 Location: -) Tak, miasto.
|
#15
11 Jun 2009 02:11 Re: Prośba o prosty programik (BASCOM) M16 |
|
|
|
| Quote: |
| może da się to jakoś skrócić?? |
spróbujmy (delikatna modyfikacja):
| Code: |
...
Zwieksz:
Incr L1
L1 = L1 MOD 5
Locate 1 , 1
If L1 = 0 Then Lcd "1 "
If L1 = 1 Then Lcd " 1 "
If L1 = 2 Then Lcd " 1 "
If L1 = 3 Then Lcd " 1 "
If L1 = 4 Then Lcd " 1"
Return
|
[/quote]
Jeśli takie rozwiązanie Ci nie odpowiada, to można jeszcze ładniej zrobić :)
|
|
| Back to top |
|
 |
wader_669 Poziom 22

Joined: 21 Nov 2003 Posts: 1534 Location: Kanalizacja poznania
|
#16
11 Jun 2009 12:55 Re: Prośba o prosty programik (BASCOM) M16 |
|
|
|
Ja moge spojrzec na twoj kod, ale:
1. Nie wytlumaczyles jasno co dokladnie ma robic procek.
2. Nie wyjasniles twojego kodu, ja nie mam ochoty go od podstaw rozwalac.
3. Jeszcze nie widzialem zebys mi wstawil pomogl.
|
|
| Back to top |
|
 |
arktik1 Poziom 21

Joined: 07 Nov 2006 Posts: 1154 Location: Piaseczno
|
#17
11 Jun 2009 21:52 Re: Prośba o prosty programik (BASCOM) M16 |
|
|
|
Jest to program do Chłodzenia wodnego komputera.
Szkoda teraz wyjaśniać bo cały czas się zmienia.
Ale w skrócie:
napięcie-- pomiar V zasilania chłodnicy.
temp-- Temperatura płynu chłodzącego + termostat 3 biegowy.
poziom wys-- wskaźnik poziomu płynu w zbiorniczku.
A to ostatnie ma pokazywać przepływ cieczy.
Dzięki HOSE2 ,przecież to proste ,nie wiem jak mogłem na to nie wpaść.
:D.
Dodano po 4 [minuty]:
No Sorry WADER ale moim zdaniem nie bardzo pomogłeś.
napisałeś program który przesuwał znak ale od 1 do 5 i z powrotem po jednokrotnym naciśnięciu przycisku.
Miało być inaczej.
Potem napisałeś że napiszesz bez WAIT ,ale chyba ci się nie chciało.
Więc myślę że wyjaśniłem sprawę PODZIĘKOWAŃ.
Dodano po 8 [minuty]:
Hose2 a co byś powiedział na ten kawałek?
| Code: |
Locate 4 , 1
Lcd "E"
Locate 4 , 7
Lcd "F"
Portc.5 = 1
Waitms 100
If Pind.2 = 0 Then
Locate 4 , 2
Lcd Chr(1)
End If
If Pind.2 = 1 Then
Locate 4 , 2
Lcd " "
End If
If Pind.3 = 0 Then
Locate 4 , 3
Lcd Chr(1)
End If
If Pind.3 = 1 Then
Locate 4 , 3
Lcd " "
End If
If Pind.4 = 0 Then
Locate 4 , 4
Lcd Chr(1)
End If
If Pind.4 = 1 Then
Locate 4 , 4
Lcd " "
End If
If Pind.5 = 0 Then
Locate 4 , 5
Lcd Chr(1)
End If
If Pind.5 = 1 Then
Locate 4 , 5
Lcd " "
End If
If Pind.6 = 0 Then
Locate 4 , 6
Lcd Chr(1)
End If
If Pind.6 = 1 Then
Locate 4 , 6
Lcd " "
End If
|
|
|
| Back to top |
|
 |
wader_669 Poziom 22

Joined: 21 Nov 2003 Posts: 1534 Location: Kanalizacja poznania
|
#18
11 Jun 2009 22:52 Re: Prośba o prosty programik (BASCOM) M16 |
|
|
|
| arktik1 wrote: |
Witam
Chciał bym prosić o napisanie prostego programiku który na wyświetlaczu LCD przesuwał by np literę o 5 miejsc do przodu i z powrotem .
|
Aha no dobra. Spoko jak masz takie nastawienie. To ja dziekuje, milej zabawy.
Dodano po 2 [minuty]:
Jestem ciekaw jak bedzie wygladac koncowy kod. Moze pod koniec sie jeszcze zglosze i pokaze wam wszystkie bledy.
|
|
| Back to top |
|
 |
arktik1 Poziom 21

Joined: 07 Nov 2006 Posts: 1154 Location: Piaseczno
|
#19
11 Jun 2009 23:22 Re: Prośba o prosty programik (BASCOM) M16 |
|
|
|
No już bez przesady , było tak:
| Quote: |
Chciał bym prosić o napisanie prostego programiku który na wyświetlaczu LCD przesuwał by np literę o 5 miejsc do przodu i z powrotem .
Czyli po kolei po naciśnięciu przycisku.
Naciskamy przycisk 1 miejsce do przodu ,następne przyciśnięcie ,następne miejsce do przodu.
gdy dojdzie do 5 to samo tylko do tyłu.
|
|
|
| Back to top |
|
 |
wader_669 Poziom 22

Joined: 21 Nov 2003 Posts: 1534 Location: Kanalizacja poznania
|
#20
12 Jun 2009 01:55 Re: Prośba o prosty programik (BASCOM) M16 |
|
|
|
Aha to sorry rzeczywiscie moj blad. Zly program tobie napisalem, nie doczytalem w takim razie do konca. Zwracam honor.
Dodano po 2 [godziny] 8 [minuty]:
W sumie nie jest to do konca moj blad bo widze, ze zmieniales swojego posta po mojej pierwszej wypowiedzi. Dobra, sprawa nie wazna. Poprawilek kod.
Dodano po 15 [minuty]:
Tak patrze na twoj kod i napisz go sobie jak tobie sie to podoba. Jak nie bedzie tobie dzialac to sie zglos bo masz duzo bledow, wymienie ci wszystkie. Sam nie bede ci poprawiac kodu (za duzo roboty).
|
|
| Back to top |
|
 |
arktik1 Poziom 21

Joined: 07 Nov 2006 Posts: 1154 Location: Piaseczno
|
#21
12 Jun 2009 19:15 Re: Prośba o prosty programik (BASCOM) M16 |
|
|
|
Tu jest cały kod.
Jeśli możesz to pokaż w którym miejscu jest błąd i jak poprawić .
W każdym razie kod działa.
| Code: |
$regfile = "m16def.dat"
$crystal = 9000000
Config Porta = Input
Porta = &B11111100
Config Portc = Output
Portc = &B00000000
Config Portd = Input
Portd = &B11111111
Config Lcd = 20 * 4
Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.4 , Rs = Portb.5
Portb.6 = 1
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Dim V As Single
Dim A As Single
Dim P As Integer
Dim C As Integer
Dim R As Integer
Dim Z As Byte
Start Adc
Start:
P = 0
V = 0
A = 0
C = 0
R = 0
Z = 0
Deflcdchar 2 , 32 , 32 , 32 , 14 , 14 , 32 , 32 , 32 ' wskaznik przeplywu.
Deflcdchar 1 , 32 , 32 , 31 , 31 , 31 , 31 , 32 , 32 'miernik plynu
'------------------------------temp-------------------
Config 1wire = Porta.1
Deflcdchar 0 , 8 , 20 , 11 , 4 , 4 , 4 , 3 , 32 'znak stopnia Celcjusza
Dim Temp As Integer , Ss As String * 6
Dim Dsid As Byte
'-----------------------przeplyw
Dim L1 As Byte
L1 = 0
Dim L2 As Byte
L2 = 0
Config Debounce = 0
Cls
Locate 2 , 5
Lcd "Dzien Dobry"
Locate 3 , 2
Lcd "System chlodzenia"
Locate 4 , 6
Lcd "WLACZONY"
Wait 5
Cls
Do
Cursor Off
Debounce Pind.7 , 0 , Zwieksz , Sub '---przeplyw
Debounce Pina.7 , 0 , Wlacz , Sub
If L2 = 5 Then Gosub Plyn
If L2 = 5 Then L2 = 0
If Pind.1 = 0 Then Gosub Alarm1
If Portc.3 = 1 Then
Locate 4 , 8
Lcd "-"
End If
If Portc.3 = 0 Then
Locate 4 , 8
Lcd " "
End If
If Pina.6 = 0 Then Gosub Wyciek
'-----------------------napiecie
'----pobieranie
For Z = 1 To 10
P = P + Getadc(0)
Next T
P = P / 10
V = P / 80
A = Frac(v)
V = Int(v)
A = A * 10
R = Int(a) + 10
C = V
Locate 1 , 1
Lcd " Went."
Locate 2 , 1
Lcd "V = "
Lcd C
Lcd R
If V >= 10 Then
Locate 2 , 7
Lcd "."
Locate 2 , 9
Lcd "0"
End If
If V < 10 Then
Locate 2 , 6
Lcd "."
Locate 2 , 8
Lcd "0 "
End If
'---------------------temp
1wreset
1wwrite &H55
1wverify Dsid
1wwrite &HBE
Temp = 1wread(2)
1wreset
1wwrite &HCC
1wwrite &H44
Temp = Temp * 10
Temp = Temp / 16
Ss = Str(temp)
Ss = Format(ss , "0.0")
Locate 1 , 8
Lcd " Temp.Plynu"
Locate 2 , 14
Lcd ; Ss ; Chr(0)
If Temp >= 330 Then 'TEMP WLACZENIA 1 BIEGU
Portc.0 = 1
End If
If Temp <= 320 Then 'WYLACZENIA 1 BIEGU
Portc.0 = 0
End If
If Temp >= 340 Then 'WLACZENIE 2 BIEGU
Portc.1 = 1
End If
If Temp <= 320 Then 'WYLACZENIE 2 BIEGU
Portc.1 = 0
End If
If Temp >= 350 Then 'wlaczenie 3 bieg
Portc.2 = 1
End If
If Temp <= 320 Then 'wylaczenie 3 bieg
Portc.2 = 0
End If
Loop
End
Plyn:
'-----------------poziom wys
Locate 4 , 1
Lcd "E"
Locate 4 , 7
Lcd "F"
Portc.5 = 1
Waitms 100
If Pind.2 = 0 Then
Locate 4 , 2
Lcd Chr(1)
End If
If Pind.2 = 1 Then
Locate 4 , 2
Lcd " "
End If
If Pind.3 = 0 Then
Locate 4 , 3
Lcd Chr(1)
End If
If Pind.3 = 1 Then
Locate 4 , 3
Lcd " "
End If
If Pind.4 = 0 Then
Locate 4 , 4
Lcd Chr(1)
End If
If Pind.4 = 1 Then
Locate 4 , 4
Lcd " "
End If
If Pind.5 = 0 Then
Locate 4 , 5
Lcd Chr(1)
End If
If Pind.5 = 1 Then
Locate 4 , 5
Lcd " "
End If
If Pind.6 = 0 Then
Locate 4 , 6
Lcd Chr(1)
End If
If Pind.6 = 1 Then
Locate 4 , 6
Lcd " "
End If
If Pind.3 = 1 Then
Locate 3 , 1
Lcd "Malo plynu"
End If
If Pind.3 = 0 Then
Locate 3 , 1
Lcd "Poziom "
End If
If Pind.2 = 1 And Pind.3 = 1 Then Gosub Alarm
Portc.5 = 0
Return
Wlacz:
Toggle Portc.3
Return
Alarm:
Toggle Portc.4
Locate 3 , 1
Lcd " MALO "
Locate 4 , 1
Lcd " PLYNU "
If Portc.3 = 1 And Portc.4 = 1 Then Gosub Wylacz
Return
'---------------------do przeplyw
Zwieksz:
Locate 3 , 13
Lcd "Przeplyw"
Locate 4 , 13
Lcd Chr(2)
Locate 4 , 20
Lcd Chr(2)
Incr L1
If L1 = 10 Then L1 = 0
L1 = L1 Mod 10
If Portc.3 = 1 And L1 = 3 Then
Locate 4 , 9
Lcd "AUTO"
End If
If Portc.3 = 1 And L1 = 9 Then
Locate 4 , 9
Lcd "OFF "
End If
If Portc.3 = 0 And L1 = 6 Then
Locate 4 , 9
Lcd " "
End If
Locate 4 , 14
If L1 = 0 Then Lcd "* "
If L1 = 1 Then Lcd " * "
If L1 = 2 Then Lcd " * "
If L1 = 3 Then Lcd " * "
If L1 = 4 Then Lcd " * "
If L1 = 5 Then Lcd " *"
If L1 = 6 Then Lcd " * "
If L1 = 7 Then Lcd " * "
If L1 = 8 Then Lcd " * "
If L1 = 9 Then Lcd " * "
If L1 = 10 Then Lcd "* "
If L1 = 1 Then
Incr L2
End If
If L2 = 5 Then Waitms 1
Return
Wylacz:
Portc.6 = 1
Waitms 300
Portc.6 = 0
Portc.3 = 0
Return
Alarm1:
Portc.4 = 1
Wait 1
Portc.4 = 0
Locate 3 , 12
Lcd " WOLNY "
Locate 4 , 12
Lcd " przeplyw"
If Portc.3 = 1 And Pind.1 = 0 Then Gosub Wylacz
Return
Wyciek:
If Portc.3 = 1 And Pina.6 = 0 Then Gosub Wylacz
If Pina.6 = 0 Then
Locate 3 , 4
Lcd "Wyciek Plynu"
End If
Return
'------opis -----------------------------------------------------------------
'Portc.4--Piszczyk
'Portc.5--Zasilanie czujnika poziomu
'Od Pind.2 do Pind.6 --Poziom płynu
'Od Portc.0 Do Portc.2 --3 Biegi wentylatora
'Porta.1 --czujnik temperatury.
'Porta.0 --Voltomierz
'Pind.1 --czujnik wolny przepływ
'Pind.7 --wskaznik ruchu
' \Portc.6--do przekaźnika wylaczenia kompa.
'Porta.6--czujnik wycieku.
|
|
|
| Back to top |
|
 |
hose2 Poziom 12

Joined: 14 Dec 2007 Posts: 105 Location: -) Tak, miasto.
|
#22
13 Jun 2009 00:38 Re: Prośba o prosty programik (BASCOM) M16 |
|
|
|
Ale masz bajery :)
i znów optymalizacja:
| Code: |
Plyn:
'-----------------poziom wys
Locate 4 , 1
Lcd "E"
Locate 4 , 7
Lcd "F"
Portc.5 = 1
Waitms 100
Locate 4 , 2
If Pind.2 = 0 Then
Lcd Chr(1)
Else
Lcd " "
End If
If Pind.3 = 0 Then
Lcd Chr(1)
Else
Lcd " "
End If
If Pind.4 = 0 Then
Lcd Chr(1)
Else
Lcd " "
End If
If Pind.5 = 0 Then
Lcd Chr(1)
Else
Lcd " "
End If
If Pind.6 = 0 Then
Lcd Chr(1)
Else
Lcd " "
End If
...
Incr L1
If L1 = 10 Then L1 = 0 ' stosuj to
L1 = L1 Mod 10 ' lub to - wynik ten sam
Locate 4 , 9
If Portc.3 = 1 And L1 = 3 Then
Lcd "AUTO"
End If
If Portc.3 = 1 And L1 = 9 Then
Lcd "OFF "
End If
If Portc.3 = 0 And L1 = 6 Then
Lcd " "
End If
|
Nie analizowałem reszty kodu - skoro działa...
|
|
| Back to top |
|
 |
arktik1 Poziom 21

Joined: 07 Nov 2006 Posts: 1154 Location: Piaseczno
|
#23
13 Jun 2009 13:42 Re: Prośba o prosty programik (BASCOM) M16 |
|
|
|
A dlaczego po:
| Code: |
Locate 4 , 2
If Pind.2 = 0 Then
Lcd Chr(1)
Else
Lcd " "
End If
|
nie ma następnego LOCATE??
Dodano po 2 [godziny] 40 [minuty]:
Mam jeszcze jedno pytanie.
Czy jak w pętli jest 3x DEBOUNCE to przed pętlą trzeba wpisać :
3x Config Debounce
czy wystarczy 1 raz.
|
|
| Back to top |
|
 |
hose2 Poziom 12

Joined: 14 Dec 2007 Posts: 105 Location: -) Tak, miasto.
|
#24
13 Jun 2009 15:47 Re: Prośba o prosty programik (BASCOM) M16 |
|
|
|
| arktik1 wrote: |
A dlaczego po:
| Code: |
Locate 4 , 2
If Pind.2 = 0 Then
Lcd Chr(1)
Else
Lcd " "
End If
|
nie ma następnego LOCATE??
|
A do czego to LOCATE ma być potrzebne skoro piszesz na LCD znak za znakiem? Wyświetlacz pamięta ostatnią pozycję kursora :)
| arktik1 wrote: |
Mam jeszcze jedno pytanie.
Czy jak w pętli jest 3x DEBOUNCE to przed pętlą trzeba wpisać :
3x Config Debounce
czy wystarczy 1 raz. |
Config Debounce wystarczy 1 raz - odnosi się do każdego wystąpienia DEBOUNCE.
|
|
| Back to top |
|
 |
arktik1 Poziom 21

Joined: 07 Nov 2006 Posts: 1154 Location: Piaseczno
|
#25
17 Jun 2009 00:12 Re: Prośba o prosty programik (BASCOM) M16 |
|
|
|
No i narodziła się kolejna sprawa.
Układ detekcji obrotów.
Znalazłem na elektrodzie taki kawałek kodu :
| Code: |
Temp_enk = 0
If Enk_a <> Temp_enk Then
If Enk_a <> Enk_b Then
Incr Poz
Else
Decr Poz
End If
Temp_enk = Enk1
End If
|
Chciał bym używać enkodera np>z myszki komputerowej zamiast 2 przycisków.
co wy na to ??
A może jest jakiś inny sposób?
Dodano po 1 [minuty]:
NP. do sterowania wyjściem PWM .
Dodano po 3 [minuty]:
A może jest coś w przykładach BASCOMA?
|
|
| Back to top |
|
 |
nouki Poziom 20

Joined: 12 Feb 2005 Posts: 819 Location: ŁÓDŹ
|
#26
17 Jun 2009 09:31 Re: Prośba o prosty programik (BASCOM) M16 |
|
|
|
| arktik1 wrote: |
No i narodziła się kolejna sprawa.
Układ detekcji obrotów.
|
Detekcji czy wyświetlania aktualnej wartości??
|
|
| Back to top |
|
 |
Google

|
#
17 Jun 2009 09:31 |
|
|
|
|
|
| Back to top |
|
 |
arktik1 Poziom 21

Joined: 07 Nov 2006 Posts: 1154 Location: Piaseczno
|
#27
17 Jun 2009 11:35 Re: Prośba o prosty programik (BASCOM) M16 |
|
|
|
Musi on zwiększać wartość PWM w uC,
Zamiast S1 i S2.
| Code: |
If S1 = 0 Then 'jeśli przyciśnięty S1, to
Waitms 10 'opóźnienie dla eliminacji drgań
'styków
If S1 = 0 Then 'sprawdzenie ponownie, czy
'przycisk S1 dalej naciśnięty,
'jeśli tak, to
Incr I
'zwiększenie o jeden wartości I
If I = 0 Then
'jeśli wartość I = 0, to
I = 255 'wpisanie do I wartości 255
End If
Pwm1a = I 'wpisanie wartości I do zmiennej
'Pwm1a określającej wypełnienie
'PWM
Waitms 80 'opóźnienie 20 ms
End If 'koniec warunków
End If
If S2 = 0 Then 'jeśli przyciśnięty S2, to
Waitms 10 'opóźnienie dla eliminacji drgań
'styków
If S2 = 0 Then 'sprawdzenie ponownie, czy
'przycisk S2 dalej naciśnięty,
'jeśli tak, to
Decr I 'zmniejszenie wartości I o jeden
If I = 255 Then 'jeśli wartość I = 255, to
I = 0 'zerowanie wartości zmiennej I
End If
Pwm1a = I 'wpisanie wartości I do zmiennej
'Pwm1a określającej wypełnienie
'PWM
Waitms 80 'opóźnienie 20 ms
End If 'koniec warunków
End If
If I = 0 Then
Portb.5 = 0
End If
|
|
|
| Back to top |
|
 |
hose2 Poziom 12

Joined: 14 Dec 2007 Posts: 105 Location: -) Tak, miasto.
|
#28
17 Jun 2009 15:53 Re: Prośba o prosty programik (BASCOM) M16 |
|
|
|
| arktik1 wrote: |
A może jest jakiś inny sposób?
A może jest coś w przykładach BASCOMA? |
Tak, jest w helpie : "ENCODER"
|
|
| Back to top |
|
 |
arktik1 Poziom 21

Joined: 07 Nov 2006 Posts: 1154 Location: Piaseczno
|
#29
25 Jun 2009 21:39 Re: Prośba o prosty programik (BASCOM) M16 |
|
|
|
Poskładałem taki programik:
| Code: |
$regfile = "m16def.dat"
$crystal = 9000000
Config Porta = Input
Porta = &B11111100
Config Portc = Output
Portc = &B00010000
Config Portd = Input
Portd = &B11111111
Config Portb = &B11111100
Portb = &B11111111
Config Lcd = 20 * 2
Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.4 , Db6 = Portb.3 , Db7 = Portb.2 , E = Portb.6 , Rs = Portb.7
Portb.6 = 1
Dim Wyn As Integer
Config Timer0 = Counter , Edge = Rising
Cursor Off
Cls
Do
Timer0 = 0
Start Timer0
Waitms 900
Stop Timer0
Wyn = Timer0 * 1
Locate 1 , 1
Lcd Wyn
Locate 2 , 1
If Wyn = 0 Then Lcd " "
If Wyn = 1 Then Lcd "= "
If Wyn = 2 Then Lcd "== "
If Wyn = 3 Then Lcd "=== "
If Wyn = 4 Then Lcd "==== "
If Wyn = 5 Then Lcd "===== "
If Wyn = 6 Then Lcd "======"
If Wyn = 0 Then Gosub Alarm1
Loop
End
|
Czy można wyeliminować WAITMS.
Można to jakoś inaczej napisać??
|
|
| Back to top |
|
 |
hose2 Poziom 12

Joined: 14 Dec 2007 Posts: 105 Location: -) Tak, miasto.
|
#30
25 Jun 2009 23:59 Re: Prośba o prosty programik (BASCOM) M16 |
|
|
|
| arktik1 wrote: |
Poskładałem taki programik:
| Code: |
...
Timer0 = 0
Start Timer0
Waitms 900
Stop Timer0
Wyn = Timer0 * 1
...
|
Czy można wyeliminować WAITMS.
Można to jakoś inaczej napisać?? |
A co ten programik ma robić, bo taki sposób użycia timera i waitms to dość niespotykana konstrukcja.
|
|
| Back to top |
|
 |