FAQ | Points | Add... | Recent posts | Search | Register | Log in


Prośba o prosty programik (BASCOM) M16


Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> Prośba o prosty programik (BASCOM) M16
Author
Message
arktik1
Poziom 21
Poziom 21


Joined: 07 Nov 2006
Posts: 1154
Location: Piaseczno

Post#1 Post from the author of the topic 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

Google Adsense


Post# Post from the author of the topic 09 Jun 2009 12:11   





Back to top
   
wader_669
Poziom 22
Poziom 22


Joined: 21 Nov 2003
Posts: 1534
Location: Kanalizacja poznania

Post#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
Poziom 21


Joined: 07 Nov 2006
Posts: 1154
Location: Piaseczno

Post#3 Post from the author of the topic 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
Poziom 12


Joined: 14 Dec 2007
Posts: 105
Location: -) Tak, miasto.

Post#4 09 Jun 2009 13:29helpful post - solution   

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
Poziom 21


Joined: 07 Nov 2006
Posts: 1154
Location: Piaseczno

Post#5 Post from the author of the topic 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
Poziom 23


Joined: 22 Oct 2008
Posts: 3913
Location: Warszawa

Post#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
Poziom 21


Joined: 07 Nov 2006
Posts: 1154
Location: Piaseczno

Post#7 Post from the author of the topic 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
Poziom 23


Joined: 22 Oct 2008
Posts: 3913
Location: Warszawa

Post#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
Poziom 21


Joined: 07 Nov 2006
Posts: 1154
Location: Piaseczno

Post#9 Post from the author of the topic 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

Google Adsense


Post# Post from the author of the topic 09 Jun 2009 22:18   





Back to top
   
wader_669
Poziom 22
Poziom 22


Joined: 21 Nov 2003
Posts: 1534
Location: Kanalizacja poznania

Post#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
Poziom 20


Joined: 28 Apr 2003
Posts: 971
Location: ''-''

Post#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
Poziom 12


Joined: 14 Dec 2007
Posts: 105
Location: -) Tak, miasto.

Post#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
Poziom 22


Joined: 21 Nov 2003
Posts: 1534
Location: Kanalizacja poznania

Post#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
Poziom 21


Joined: 07 Nov 2006
Posts: 1154
Location: Piaseczno

Post#14 Post from the author of the topic 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

Google Adsense


Post# Post from the author of the topic 10 Jun 2009 15:37   





Back to top
   
hose2
Poziom 12
Poziom 12


Joined: 14 Dec 2007
Posts: 105
Location: -) Tak, miasto.

Post#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
Poziom 22


Joined: 21 Nov 2003
Posts: 1534
Location: Kanalizacja poznania

Post#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
Poziom 21


Joined: 07 Nov 2006
Posts: 1154
Location: Piaseczno

Post#17 Post from the author of the topic 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
Poziom 22


Joined: 21 Nov 2003
Posts: 1534
Location: Kanalizacja poznania

Post#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
Poziom 21


Joined: 07 Nov 2006
Posts: 1154
Location: Piaseczno

Post#19 Post from the author of the topic 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
Poziom 22


Joined: 21 Nov 2003
Posts: 1534
Location: Kanalizacja poznania

Post#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
Poziom 21


Joined: 07 Nov 2006
Posts: 1154
Location: Piaseczno

Post#21 Post from the author of the topic 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
Poziom 12


Joined: 14 Dec 2007
Posts: 105
Location: -) Tak, miasto.

Post#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
Poziom 21


Joined: 07 Nov 2006
Posts: 1154
Location: Piaseczno

Post#23 Post from the author of the topic 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
Poziom 12


Joined: 14 Dec 2007
Posts: 105
Location: -) Tak, miasto.

Post#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
Poziom 21


Joined: 07 Nov 2006
Posts: 1154
Location: Piaseczno

Post#25 Post from the author of the topic 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
Poziom 20


Joined: 12 Feb 2005
Posts: 819
Location: ŁÓDŹ

Post#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

Google Adsense


Post# 17 Jun 2009 09:31   





Back to top
   
arktik1
Poziom 21
Poziom 21


Joined: 07 Nov 2006
Posts: 1154
Location: Piaseczno

Post#27 Post from the author of the topic 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
Poziom 12


Joined: 14 Dec 2007
Posts: 105
Location: -) Tak, miasto.

Post#28 17 Jun 2009 15:53helpful post - solution   

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
Poziom 21


Joined: 07 Nov 2006
Posts: 1154
Location: Piaseczno

Post#29 Post from the author of the topic 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
Poziom 12


Joined: 14 Dec 2007
Posts: 105
Location: -) Tak, miasto.

Post#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
   
Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> Prośba o prosty programik (BASCOM) M16
Page 1 of 2 Go to page 1, 2  Next
Similar topics
Prosty programik c++ - sprawdzil by mi ktos...? (1)
potrzebuje prosty programik w delphi 5 (1)
Prosty programik w java (4)
Prosty programik w C, problem (9)
[M16][BASCOM] Sterownik urządzeń RC5 z touch screenem (2)
M16 (Bascom) sterowanie wentylatorami . (2)
BASCOM M16 ikona wentylatora (19)
[M16] [Bascom] Sterowanie PCF8574AP (10)
[M16] Prosty układ a nie działa (programowanie). (5)
Prosty programik w BASCOM proszę o pomoc. (6)

Page generation time: 0.23 seconds


FAQ || Administrator || Moderators || Widgets and banners || Contact
elektroda.pl topic RSS feed