Forum www.nestor-electronic.pl Strona Główna www.nestor-electronic.pl
Forum sterowników procesorowych- programy BASCOM
 
 FAQFAQ   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Pierwszy "Program"

 
Napisz nowy temat   Odpowiedz do tematu    Forum www.nestor-electronic.pl Strona Główna -> Pomoc w programowaniu BASCOM
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
fourup
Lekko zaangażowany


Dołączył: 06 Maj 2012
Posty: 42
Skąd: KRK

PostWysłany: Sro Maj 09, 2012 11:44 pm    Temat postu: Pierwszy "Program" Odpowiedz z cytatem

Na razie się uczę, ale na początek zacząłem się bawić tym, co dostałem razem z zestawem startowym...
Na początek poszedł termometr (DS18B20 via 1wire) i przekaźniki...
Oto wynik mojej dzisiejszej zabawy:
Kod:

' program dla zestawu uruchomieniowego ATmega8 v.1.0/1.1 firmy nestor-electronic
' autor: fourup (na podstawie dołączonego do zestawu oprogramowania)
'
' program testowy nr 01
'
' obsługa termometru DS18B20 na 1wire
' sterowanie przekaźnikami przy pomocy przycisków
' ------------------------------------------------------------------------------

$regfile = "m8def.dat"                                      'informuje kompilator o pliku
      'dyrektyw mikrokontrolera
$crystal = 8000000                                          'informuje kompilator
      'o częstotliwości oscylatora
      'taktującego mikrokontroler
Config Pinb.1 = Input
                                      'linia PB1 jako wejściowa
Config Lcd = 16 * 2                                         'konfiguracja typu wyťwietlacza
      'LCD
Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portd.4 , E = Portd.3 , Rs = Portd.2       'konfiguracja linii
      'mikrokontrolera, do ktˇrych
      'do-¦czono wyťwietlacz
      'LCD

Config 1wire = Portd.1
Deflcdchar 0 , 12 , 18 , 18 , 12 , 32 , 32 , 32 , 32        ' replace ? with number (0-7)
Deflcdchar 1 , 31 , 27 , 19 , 27 , 27 , 27 , 17 , 31        ' replace ? with number (0-7)
Deflcdchar 2 , 31 , 19 , 29 , 29 , 27 , 23 , 17 , 31        ' replace ? with number (0-7)
Deflcdchar 3 , 31 , 17 , 29 , 27 , 29 , 21 , 27 , 31        ' replace ? with number (0-7)

Config Portb.2 = Output                                     'pk2
Config Portb.1 = Output                                     'pk1
Config Portd.0 = Output                                     'pk3


Config Pinb.3 = Input                                       'porty jako wejściowe
Config Pinb.4 = Input                                       'porty jako wejściowe
Config Pinb.5 = Input                                       'porty jako wejściowe

Set Portb.3                                                 ' ustawia na stan wysoki
Set Portb.4                                                 ' ustawia na stan wysoki
Set Portb.5                                                 ' ustawia na stan wysoki


Dim T1 As Single
Dim T2 As Single
Dim B1 As Byte , B2 As Byte , R As Byte
Dim Tmp As String * 6
Dim Znak As String * 1
R = &HFF
Declare Sub 1wr                                             'podprogram resetujacy magistrale 1w
Cursor Off
Cls
' powitanie

Cls
Upperline
Lcd "     Witaj!     "
Wait 2
Cls

Do
1wr                                                         'podprogram 1wr
1wwrite &HCC                                                'komenda skip ROM
1wwrite &H44                                                'komenda convert T
Waitms 250
Waitms 250
1wr                                                         'podprogram 1wr
1wwrite &HCC                                                'komenda skip ROM
1wwrite &HBE                                                'komenda read

B1 = 1wread()                                               'odczyt z termometru
B2 = 1wread()

1wr                                                         'podprogram 1wr

If B2 >= 248 Then                                           'w przypadku temperatur ujemnych
B1 = R - B1                                                 'Od 255 Odejmujemy B1
B2 = R - B2                                                 'od 255 odejmujemy B2
Znak = "-"
Else
Znak = "+"
End If
T1 = B1 / 16                                                'Przesuniecie w pawo o 4 bajty
T2 = B2 * 16                                                'przesuniecie w lewo o 4 bajty
T1 = T1 + T2

Tmp = Fusing(t1 , " ###.#")

Home
Lcd "T: " ; Znak ; Tmp ; Chr(0) ; "C "
Locate 1 , 14
If Portb.1 = 0 Then
  Lcd "1"
Else
  Lcd Chr(1)
End If
Locate 1 , 15
If Portb.2 = 0 Then
  Lcd "2"
Else
  Lcd Chr(2)
End If
Locate 1 , 16
If Portd.0 = 0 Then
  Lcd "3"
Else
  Lcd Chr(3)
End If

Debounce Pinb.3 , 0 , Pr1 , Sub                             'czyta swicze
Debounce Pinb.4 , 0 , Pr2 , Sub                             'czyta swicze
Debounce Pinb.5 , 0 , Pr3 , Sub                             'czyta swicze


Waitms 250
Waitms 250
Waitms 250
Waitms 50
Loop

Sub 1wr                                                     'podprogram resetujacy magistrale
1wreset
End Sub


Pr1:
  Toggle Portb.1
  Lowerline
  If Portb.1 = 0 Then
    Lcd ">  PK1 wylaczony"
    Wait 2
  Else
    Lcd ">   PK1 wlaczony"
    Wait 2
  End If
  Lowerline
  Lcd "1-OK   2--   3-+"
Return

Pr2:
  Toggle Portb.2
  Lowerline
  If Portb.2 = 0 Then
    Lcd ">  PK2 wylaczony"
    Wait 2
  Else
    Lcd ">   PK2 wlaczony"
    Wait 2
  End If
  Lowerline
  Lcd "1-OK   2--   3-+"
Return

Pr3:
  Toggle Portd.0
  Lowerline
  If Portd.0 = 0 Then
    Lcd ">  PK3 wylaczony"
    Wait 2
  Else
    Lcd ">   PK3 wlaczony"
    Wait 2
  End If
  Lowerline
  Lcd "1-OK   2--   3-+"
Return



Co o tym sądzicie?
Jakie błędy popełniłem, których w przyszłości powinienem unikać (chodzi przede wszystkim o optymalizację - teraz całość zajmuje ok. 40% flasha)?

W przyszłości (jak najbliższej) planuję napisać coś na wzór komputerka pokładowego, jednak przystosowany bardziej do moich potrzeb - trochę bawię się w offroad, więc potrzebuję dokładności pomiaru drogi do 10m, licznik drogi całkowity i "dzienny" na jednym ekranie z opcją kasowania "dziennego" jednym klawiszem. A do tego jeszcze 2 storpery (ciągły i "dzienny")... Ale do tego to jeszcze duuużo nauki przede mną.
No i najważniejsze - jeżdżąc na różnych kołach (różne rozmiary) - opcja "szybkiej kalibracji", tak żeby po zmianie kół np. z 31" na 33" można było wykonać kalibrację pomiaru an odcinku 1000m (10 słupków przy drodze)...
_________________
Pozdrawiam
~fourup
____________________
Od Nestora mam:
AT8 v.1.0 - zarządza ciepełkiem w domciu
AT32SD +DHT11 +GM-210 (GPS) +inne gadżety... - bawię się Mr. Green
AT32TCPIP v2 + ExtPK - zajefajny sprzęt!
AT32U4 - koniec z programatorami!
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum www.nestor-electronic.pl Strona Główna -> Pomoc w programowaniu BASCOM Wszystkie czasy w strefie CET (Europa)
Strona 1 z 1

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach


Powered by phpBB © 2001, 2005 phpBB Group