Zapis 240 odczytow do tablicy


Witam
Mam maly problem, szukam rozwiazania.
Jest logger na atmega128 (temperatura x2, cisnienie, wilgotnosc, zegar), odczyt dziala ok, zapis robie na 24c256.
Zapisuje 12 bajtow, cztery pierwsze to zegar, 8 nastepnych to wyniki pomiarow.
Teraz odczytuje sobie ostatnie zapisy i chce je wyswietlic na graficznym lcd w postaci wykresu.
LCD 64x240.
Musze miec 240 wynikow dla kazdego czujnika.

Odczyt w locie i wyswietlenie na lcd dziala, ale strasznie dlugo to trwa.
Czy lepszym sposobem nie bylo by zapisac te 240 wynikow x4 (czyli cztery tablice po 240 odczytow) i wyswietlanie zrobic na zasadzie odczytow z tablicy?
Bedzie szybciej?
Oczywiscie zajme sobie pamiec, ale moze starczy na to miejsca.
Chyba ze inny sposob na wyswietlenie wykresow?

Macie jakies pomysly?

Druga sprawa jest taka, czy da sie grafike zapisac na zewnetrznej pamieci?
Jak mam zdeklarowana we flash, zajmuje troche miejsca..moze da sie je przesunac do zewnetrznej pamieci?




Portret użytkownika kaktus

wydaje się proste ale tylko pobieżnie

Trzeba dobrze temat rozkminić i optymalny algorytm wymyślić.
powiedz mi ile wyników jednorazowo na lcd potrzebne jest.
?C ma skończone zasoby, zapis i odczyt z pamięci EEPROM jest jak wiesz powolny, z tego tytułu wynikają ograniczenia.

Przejdźmy do konkretów...
mało napisałeś jak co robisz więc moja odpowiedź będzie taka jaka będzie ;-)
1. software - próbowałbym odczytywać tylko te dane, które mają na wyświetlaczu wylądować - pewno będzie ich mniej wtedy ...
2. software - spróbuj ograniczyć ilość danych w eeprom np czy konieczne są wszystkie daty i godziny jeżeli interwał zapisu jest stały? Może wystarczy startowy zapis stempla czasu, a potem sensowny algorytm wyliczający datę/czas kolejnych próbek?
3. software - sprawa może banalna dla szybkości wykonywania kodu ogranicz zmienne większe niż byte. Wiesz dokładnie co kuleje - może obliczenia są czasochłonne, bo używasz typów du i czterobajtowych?
3. hardware - zmień EEPROM na inny typ który jest szybszy dla przykładu FRAM tu takie nowoczesne modele MB85RS1MT i MB85RS2MT 10x pojemniejsze od swoich poprzedników, ale zwróć uwagę na ich żywotność pod względem cykli zapisów.

Na tą chwilę więcej uwag nie mam.

-

"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".

Portret użytkownika wchpikus

re:wydaje się proste ale tylko pobieżnie

ok, robie barometr, odczyty maja byc co godzine, na razie sa co minute, testuje stabilnosc.

Kod troche zamieszany, ale moze dojdziesz co do czego, duzo rzeczy jeszcze jest do zrobienia, duzo jest nie użytych funkcji.

Na razie dziala caly czas w programie 2, wiec wyswietla na zmiane godzina, temperatury , wilgotnosc i cisnienie.


Portret użytkownika wchpikus

re:wydaje się proste ale tylko pobieżnie

Wklejam kod:

mozecie to poprawic, by wygladalo ok?
Nie wiem jak wkleic dobrze kod, by wygladal jak bascom.

Na razie utknalem na funkcji ryswykres, czas rysowania takiego wykresu jest za dlugi..
Chyba za dlugi kod do analizowania, opisze co i jak.

Dzialanie jest proste, odczyt czujnikow, zapamietanie odczytow, rozebranie na pojedyncze cyfry, przypisanie grafik cyfr do pojedynczych cyfr, wyswietlenie na graficznym lcd.
Zapis do komorek pamieci od 0 adresu do 31920.

Uklad dziala stabilnie juz od ponad miesiaca.

Zapis do pamieci wyglada tak, zdjete rs-em:


adrespam = 97 Bbyte = 0061 Danaw = 0037 55 danal = 37 danah = 00
adrespam = 98 Bbyte = 0062 Danaw = 0000 0 danal = 37 danah = 00
logger-zapis danych do pamieci------------------------------
adrespam = 99 Bbyte = 0063 Danaw = 00E6 230 danal = E6 danah = 00
adrespam = 100 Bbyte = 0064 Danaw = 0000 0 danal = E6 danah = 00
logger-zapis danych do pamieci------------------------------
adrespam = 101 Bbyte = 0065 Danaw = 005F 95 danal = 5F danah = 03
adrespam = 102 Bbyte = 0066 Danaw = 0003 3 danal = 5F danah = 03
logger-zapis danych do pamieci------------------------------
adrespam = 103 Bbyte = 0067 Danaw = 0001 1 danal = 01 danah = 04
adrespam = 104 Bbyte = 0068 Danaw = 0004 4 danal = 01 danah = 04
logger-zapis danych do pamieci------------------------------
adrespam = 105 Bbyte = 0069 Danaw = 0014 20 danal = 01 danah = 04
logger-zapis danych do pamieci------------------------------
adrespam = 106 Bbyte = 006A Danaw = 000C 12 danal = 01 danah = 04
logger-zapis danych do pamieci------------------------------
adrespam = 107 Bbyte = 006B Danaw = 0016 22 danal = 01 danah = 04
logger-zapis danych do pamieci------------------------------
adrespam = 108 Bbyte = 006C Danaw = 0004 4 danal = 01 danah = 04
dane dapisane do pamieci---------------------------------------------
th 55
Dtempbmp 230
hh 863
Dcis 1025
Ddzien 20
Dmies 12
Dgodz 22
Dmin 4

adrespam, adres komorki 24c256
Bbyte to dana, jaka zapisuje
danal, danah to zapis zmiennej word lub long.

pod zapisem widac co wpisal do komorek.(th, Dtempbmp,hh itd)oraz wartosci.

widac ze zaczal od 97 komorki, konczy na 108, jest 12 komorek do zapisu.

nastepny zapis jest od 109 (akurat tak wyciete z loga).

Po zaniku napiecia lub resecie odczytuje komorke 32760 i 32761, gdzie zapisuje ostatni zapisany adres.(program Ostadres)

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''moja konfiguracja sprzetowa
$regfile = "m128def.dat"
$crystal = 16000000 'dwa kwarce!!!
$hwstack = 255
$swstack = 255
$framesize = 255
$baud = 9600 'szybkosc rs-a
 
'**************************** Definicje związane z lcd i inne ************************
 
'*************************************************************************************
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'adc 'pzretwornik adc dla czujnika oswietlenia
Enable Adc
Start Adc
 
Config Timer1 = Pwm , Pwm = 8 , Compare B Pwm = Clear Up , Prescale = 8 'pwm dla led lcd
Enable Timer1
Start Timer1
 
Config Timer3 = Timer , Prescale = 64 'przerwanie w timerze
On Timer3 Sekunda
Enable Timer3
Start Timer3
 
Enable Interrupts 'wlaczenie przerwania
 
Config Graphlcd = 240 * 64 , Dataport = Portc , Controlport = Porta , Ce = 3 , Cd = 2 , Wr = 1 , Rd = 0 , Reset = 4 , Fs = 5 , Mode = 6 'lcd graficzny
Cls
Cursor Off
 
Config Sda = Portf.3 'BMP085,zegar i pamiec podlaczenie
Config Scl = Portf.4
 
'
 
Config Portf.1 = Output
Ledsw Alias Portf.1 'masa diod poswietlenia sw+led
' 1-1 czerw, 0-1 niebieska, 1-0 czerwona
Config Portd.0 = Output 'led 1 sw 1
Led1 Alias Portd.0
Config Portd.1 = Output 'led 2 sw 2
Led2 Alias Portd.1
Config Portd.2 = Output 'led 3 sw 3
Led3 Alias Portd.2
Config Portd.3 = Output 'led 4 sw 4
Led4 Alias Portd.3
Config Portf.2 = Output 'led 5 sw 5
Led5 Alias Portf.2
 
Config Pind.4 = Input 'sw 1
Sw1 Alias Pind.4
Config Pind.5 = Input 'sw 2
Sw2 Alias Pind.5
Config Pind.6 = Input 'sw 3
Sw3 Alias Pind.6
Config Pind.7 = Input 'sw 4
Sw4 Alias Pind.7
Config Pinf.0 = Input 'sw 5
Sw5 Alias Pinf.0
 
Config Pinf.6 = Input ' adc
 
Config Portb.6 = Output 'wyjscie dla podswietlenia lcd
 
Declare Sub Program1 'podprogramy
Declare Sub Program2 'podprogramy
Declare Sub Program3 'podprogramy
Declare Sub Program4 'podprogramy
Declare Sub Program5 'podprogramy
Declare Sub Main 'pogram glowny w petli
Declare Sub Rs 'wysylanie danych do rs
Declare Sub Disp 'wyswietlanie wynikow program 1
Declare Sub Clslcd 'program czyszczenia lcd
Dim Sw As Byte 'zmienna przy wyniki=zmiana wyswietlania
Sw = 0
Declare Sub Odczyt 'program odczytu czujnikow
Declare Sub Temp_duze 'pr.duze cyfry
Declare Sub Wilg_duze 'pr.duze cyfry
Declare Sub Temp_duze_bmp 'pr.duze cyfry
Declare Sub Selectcase 'pr.duze cyfry
Declare Sub Cisnienie_duze 'program wyswietlania cisnienia duze fonty
Declare Sub Wykres
Declare Sub Ryswykres
Dim Iloscwykres As Byte
Iloscwykres = 0 'wykres odczytow
 
Dim Programn As Byte 'zmienna programowa
Programn = 2
Dim Odczen As Bit 'zmienna wlaczajaca pomiar
Dim Menu As Byte ' zmienna menu
Dim Zmiany As Bit ' zmiana ustawien daty i godziny
Config Debounce = 30
Dim Y As Integer
Dim Y1 As Integer
Dim Yjed As Integer
Dim Ydzie As Integer
Dim X As Byte
Y = 0
X = 0
Dim Wyniki As Byte
Wyniki = 1
 
Dim Cis_tys As Long 'pojedyncze cyfry
Dim Cis_set As Long 'pojedyncze cyfry
Dim Cis_dzie As Long 'pojedyncze cyfry
Dim Cis_jed As Long 'pojedyncze cyfry
Dim Tempds As Long
Dim Tempds_jed As Long 'pojedyncze cyfry
Dim Tempds_dzie As Long 'pojedyncze cyfry
Dim Tempds_set As Long 'pojedyncze cyfry
Dim Tempbmp_jed As Long 'pojedyncze cyfry
Dim Tempbmp_dzie As Long 'pojedyncze cyfry
Dim Tempbmp_tys As Long 'pojedyncze cyfry
Dim Tempbmp_set As Long 'pojedyncze cyfry
Dim Wilg_set As Long
Dim Wilg_dzie As Long 'pojedyncze cyfry
Dim Wilg_jed As Long 'pojedyncze cyfry
Dim Cyfra As Long 'zmienna pojedyncze cyfry=>lcd
Dim Zero As Bit 'zmienna okresl.czy 0 ma sie wyswietlac
Dim P1 As Byte 'pozycja wyswietlaniej cyfry przy selectcase cyfra
Dim Osw As Word
Dim Osw1 As Byte 'zmienna wylaczania podsw lcd w przerwianiu
Osw = 1 'zmienna odczytu czujnika osw
Dim Podswnoc As Byte 'wartosc podswietlenia noc
Podswnoc = 26 'przypisane na stale na razie
Dim Podswnocen As Byte
Dim Podsw As Byte
 
Dim Printen As Bit 'zmienne do rs-a, odczyt pojedynczy
Dim Printen1 As Bit
Printen = 0
Printen1 = 0
 
Dim Licznik As Byte 'licznik w przerwaniu
Licznik = 1
 
'**************************** Definicje związane z ds18b20 brak czujnika***************************
 
'*************************************************************************************
 
'Declare Sub Rtemp 'odczyt ds18b20
'Dim Temp As Integer
'Dim Napis As String * 6
'Dim Dse As Bit 'zmianna wlaczajaca pomiar
'Dse = 0
'Config 1wire = Portb.0 'podlaczenie 1wire
 
'**************************** Definicje związane z DTH11 ***************************
 
'*************************************************************************************
Dht_put Alias Portb.0 'podlaczenie 1wire
Dht_get Alias Pinb.0 'podlaczenie 1wire
Dht_io_set Alias Ddrb.0 'podlaczenie 1wire
 
Declare Sub Get_th(th As Integer , Hh As Word)
Dim Th As Integer
Dim Hh As Word
Dim Hh1 As Word '
Dim Crc As Byte
Dim Mybyte As Byte
Dim Sensor_data As String * 40
Dim Znakdth As Byte
Dim Tmp_str8t As String * 12
Dim Tmp_str8h As String * 16
Dim Tmp_str8z As String * 4
Dim Tmp_str8c As String * 8
Dim Dthe As Bit 'zmianna wlaczajaca pomiar
Dim Dthes As Bit 'zmianna wlaczajaca pomiar
Dim Count As Byte
Dim Napis As String * 6
Dthe = 0
Dthes = 0
 
'**************************** Definicje związane z BMP085 ***************************
 
'*************************************************************************************
 
Dim Bmpe As Bit
Bmpe = 0 'zmianna wlaczajaca pomiar
Dim Mmod As Byte
Dim Ac1 As Integer
Dim Ac1a As Long
Dim Ac2 As Integer
Dim Ac3 As Integer
Dim Ac4 As Word
Dim Ac5 As Word
Dim Ac5a As Single
Dim Ac6 As Word
Dim B1 As Integer
Dim B2 As Integer
Dim B3 As Long
Dim B3a As Long
Dim B4 As Long
Dim B5 As Long
Dim B6 As Integer
Dim B6a As Long
Dim B7 As Long
Dim Mb As Integer
Dim Mc As Integer
Dim Mc2 As Long
Dim Md As Integer
Dim Adres As Byte
Dim Wert As Byte
Dim Ut As Long
Dim X1 As Long
Dim X1t As Single
Dim X2 As Long
Dim X3 As Long
Dim Tbmp As Single
Dim Tbmp1 As Long
Dim Tbmp2 As Single
Dim T2 As Long
Dim Temperatur As String * 6
Dim Luftdruck As String * 8
Dim Druck As Single
Dim Cis_duze As Long
Dim P As Long
Dim Ppam As Long 'zmienna do zapisu
Dim P2 As Long
Dim 2potenz15 As Long
Dim 2potenz11 As Integer
Dim 2potenz13 As Integer
Dim 2potenz8 As Integer
Dim 2potenz4 As Integer
Dim 2potenz2 As Integer
Dim 2potenz16 As Long
Dim 2potenz12 As Integer
Dim Msb As Long
Dim Lsb As Long
Dim Up As Long
Dim Druckvar As Byte
Dim Lese_start As Bit
Declare Sub Berechne_temp
Declare Sub Berechne_druck
Declare Sub Schreibe_bmp085(byval Adres As Byte , Byval Wert As Byte)
Declare Sub Lese_bmp085(byval Adres As Byte , Wert As Byte)
Declare Sub Lese_roh_daten
Declare Sub Messen
Declare Sub Lese_kalib_data
Declare Sub Lese
Const Addr_schreiben = &B11101110
Const Addr_lesen = &B11101111
 
'**************************** Definicje związane z PCF8583 ***************************
 
'*************************************************************************************
Declare Sub Gettime
Declare Sub Ustaw_zegar
Declare Sub Zegar_duze
Declare Sub Krop0
Declare Sub Krop1
 
Dim Sek As Byte 'zmienna porownawcza
Dim Sk As Byte
Dim Mk As Byte
Dim Hk As Byte
Dim S As Byte
Dim Sled As Byte
Dim Mled As Byte
Dim S_string As String * 8
Dim M As Byte
Dim H As Byte
Dim Yd As Byte
Dim Wm As Byte
Dim Day As Byte
Dim Weekdays As Byte
Dim Month As Byte
Dim Year As Byte
Dim S_bcd As Byte
Dim M_bcd As Byte
Dim H_bcd As Byte
Dim Yd_bcd As Byte
Dim Wm_bcd As Byte
Dim Day_bcd As Byte
Dim Weekdays_bcd As Byte
Dim Month_bcd As Byte
Dim Year_bcd As Byte
Dim Czas_pcf As String * 8 ' wyswietlanie czasu
Dim Data_pcf As String * 8 ' wyswietlanie daty
Dim Ss As String * 8
Dim Ust_zeg As Byte
Declare Sub Ustawianie
Dim Zmienna_ust As Byte
Zmienna_ust = 0
Dim Gd As String * 8
Dim Mda As String * 8
Dim Sd As String * 8
Dim Ydd As String * 8
Dim Wmd As String * 8
Dim Yeard As String * 8
 
'**************************** Definicje związane z 24c256 ***************************
 
'*************************************************************************************
 
Declare Sub Zapis_24c256
Declare Sub Odczyt_24c256
Declare Sub Logger 'program obslugi do pamieci
Declare Sub Loggerwrite 'zapis pamieci
Declare Sub Loggerread 'odczyt pamieci
Declare Sub Rozklad 'rozbicie danych na 2 bajty L i H
Declare Sub Sumowanie 'sumowanie 2 bajtow
Declare Sub Ostadres
Dim Adrespam As Integer 'adres komorki pamieci
Adrespam = 0
Dim Adrespamost As Integer 'mlodszy bit adresu
Dim Adrespam1 As Integer 'zmienna tymczasowa zapisu adresu pam przy zapisie
Dim Adrespam2 As Integer 'zmienna tymczasowa zapisu adresu pam przy odczycie
Dim Adrespamr As Integer
Dim Adrespamw As Integer
Dim Danaw As Integer 'dane do pamieci zapis 'bajt pamieci
Dim Danar As Integer 'dane z pamieci odczyt
Dim Danal As Byte 'rozbita dana na 2 bajty
Dim Danah As Byte 'rozbita dana na 2 bajty
Dim Danarl As Byte 'dana odczytu ost adesu pamieci l
Dim Danarh As Byte 'dana odczytu ost adesu pamieci h
Dim Loglicz As Bit 'zmianna do odczytania ost adresu
Loglicz = 0
Dim Loglicz1 As Bit 'zmianna do odczytania ost adresu
Loglicz1 = 0
Dim Blockprogram As Bit
Blockprogram = 0
 
Dim Bbyte As Word 'dana l lub danah do pamieci
Dim Selbytew As Byte
Selbytew = 1
Dim Selbyter As Byte
Selbyter = 1
Dim Danasum As Integer 'zlozenie danal+danah
Dim Nast As Integer 'znienna do adresacji komorek
Dim Loggeren As Bit
Loggeren = 0
Dim Loggeren1 As Bit 'flaga pamieci
Loggeren1 = 1
Dim Loggerenr As Bit 'flaga wlaczenia odczytu z pamieci
Loggerenr = 0
'-------------------------------------------------------- zmienne do pamieci
Dim Dth As Integer 'zapis temp dht22
Dim Dtempbmp As Long 'zapis temp bmp
Dim Dhh As Integer 'zapis wilgotnosci
Dim Dcis As Integer 'zapis cisnienia
Dim Ddzien As Byte 'zapis dnia
Dim Dmies As Byte 'zapis miesiaca
Dim Dgodz As Byte 'zapis godziny
Dim Dmin As Byte 'zapis minuty
'--------------------------------------------------------
Dim Dthr As Integer 'odczyt temp dth22 z pamieci
Dim Dtempbmpr As Long 'odczyt temp bmp z pamieci
Dim Dhhr As Integer 'odczyt wilgotnosc z pamiecii
Dim Dcisr As Integer 'odczyt cisnienia z pamieci
Dim Ddzienr As Byte 'odczyt dnia z pamieci
Dim Dmiesr As Byte 'odczyt miesiaca z pamieci
Dim Dgodzr As Byte 'odczyt godziny z pamieci
Dim Dminr As Byte 'odczyt minuty z pamieci
 
Adrespam = 1
Nast = 0
 
'AT24C256 -> 0 - 32767 adresy
'31920 adresow 2660 wpisow po 12 bajtow
' co godzine wyjdzie 110 dni
' co 30min wyjdzie 55 dni
' wolna pamiec 847 adresow
'
'**************************** Glowny program *****************************************
 
'*************************************************************************************
Call Lese_kalib_data 'kalibracja bmp85
Readeeprom Podsw , 1 'zczytanie ustawien podsw z pamieci atmegi
Readeeprom Podswnoc , 2 'zczytanie ustawien podsw z pamieci atmegi
 
Do
If Sw4 = 1 And Loglicz = 0 And Loglicz1 = 0 Then
Call Ostadres
End If
 
Call Main 'wejscie w program glowny
Loop
 
'**************************** Program Main *****************************************
 
'*************************************************************************************
Main: 'program glowny
Do
Osw = Getadc(6) 'odczyt oswietlenia
 
If Wyniki = 2 Then
Bmpe = 1
Dthes = 1
Else 'umozliwienie przed odczytem czujnika dth22
Bmpe = 0 'wlaczenie czujnika bmp85
End If
 
If Wyniki = 4 Then
Dthe = 1
Else
Dthe = 0 'wlaczenie czujnika th11
End If
 
If Licznik = 50 Then 'wylaczenie podswietlenia klawiszy
Reset Led1
Reset Led2
Reset Led3
Reset Led4
Reset Led5
Reset Ledsw
End If
 
If Osw1 = 1 Then 'wylaczenie podwietlenia lcd
Ocr1b = Podsw
Else
Ocr1b = 0
End If
 
'wlaczenie po czasie osw noc
If Osw < 11 And Osw1 = 0 Then
Podswnocen = Podswnocen + 1 'liczy do 10
If Osw < 11 And Podswnocen = 10 And Osw1 = 0 Then
Ocr1b = Podswnoc
Podswnocen = 9 'zatrzymuje sie na 10
End If
Else
Podswnocen = 0
End If
 
'############################################### 'wejscie w programowanie zegara
 
If Sw1 = 0 And Sw5 = 1 Then 'wcisniecie klawisza 1
Waitms 20
End If
If Sw1 = 0 And Sw5 = 1 Then
Programn = 1
Licznik = 1
Osw1 = 1
Reset Ledsw
Set Led1
Reset Led2
Reset Led3
Reset Led4
Reset Led5
Cls
End If
 
If Sw5 = 0 And Sw1 = 0 Then 'wcisniecie klawisza 5 i 1
Waitms 20 'wejscie w programowanie
End If
If Sw5 = 0 And Sw1 = 0 Then
Osw1 = 1
Set Ledsw
Set Led1
Reset Led2
Reset Led3
Reset Led4
Set Led5
Wait 1
Call Ustaw_zegar
End If
 
'###############################################
 
If Sw2 = 0 Then 'wcisniecie klawisza 2
Waitms 20
End If
If Sw2 = 0 Then
Osw1 = 1
Programn = 2
Reset Ledsw
Reset Led1
Set Led2
Reset Led3
Reset Led4
Reset Led5
Cls
End If
 
If Sw3 = 0 Then 'wcisniecie klawisza 3
Waitms 20
End If
If Sw3 = 0 Then
Osw1 = 1
Programn = 3
Reset Ledsw
Reset Led1
Reset Led2
Set Led3
Reset Led4
Reset Led5
Cls
End If
 
If Sw4 = 0 And Sw5 = 0 Then 'wcisniecie klawisza 4
Waitms 20
End If
If Sw4 = 0 And Sw5 = 0 Then
Osw1 = 1
Programn = 4 'kasowanie pamieci i adresu
Reset Ledsw
Reset Led1
Reset Led2
Reset Led3
Reset Led5
Set Led4
Cls
End If
 
If Sw5 = 0 And Sw4 = 1 Then 'wcisniecie klawisza 5
Waitms 20
End If
If Sw5 = 0 And Sw4 = 1then
Osw1 = 1
Programn = 5
Reset Ledsw
Reset Led1
Reset Led2
Reset Led3
Reset Led4
Set Led5
Cls
End If
 
If Sw1 = 0 And Sw5 = 0 Then 'wejscie w tryb programowania
Waitms 500
End If
If Sw1 = 0 And Sw5 = 0 Then
Programn = 6
End If
 
Select Case Programn 'wybor programu
Case 1 :
Program1
Case 2
Program2
Case 3 :
Program3
Case 4 :
Program4
Case 5
Program5
Case 6:
Ustaw_zegar
End Select
 
Call Gettime
 
Sled = S Mod 10 'wyciagniesie z sek jednosci
Mled = M Mod 10 'wyciagniesie z min jednosci
Select Case Sled 'MIGA LED JAKO WSKAZNIK ZE DZIALA
Case 0 : Set Led5
Case 1 : Reset Led5
Case 2 : Set Led5
Case 3 : Reset Led5
Case 4 : Set Led5
Case 5 : Reset Led5
Case 6 : Set Led5
Case 7 : Reset Led5
Case 8 : Set Led5
Case 9 : Reset Led5
End Select
 
'---------------------------------------------przelaczanie wyswietlania pr2
If Sled = 9 Then
Sw = 0
End If
 
If Sled = 0 And Sw = 0 And Blockprogram = 0 Then 'czekaj na wilgotnosc
Wyniki = Wyniki + 1
Sw = 1
End If
 
If Sled = 0 And Sw = 1 Then
Call Clslcd
Sw = 2 'czysc ekran
End If
'---------------------------------------------
If Wyniki = 6 Then 'ilosc podprogramow program2
Wyniki = 1
End If
 
If Mled = 1 Or Mled = 3 Or Mled = 5 Or Mled = 7 Or Mled = 9 And Programn <> 4 And Programn <> 5 Then 'wlaczenie pomiaru co 1 min
Odczen = 1
Set Led4 'sygnalizacja oczytu czujnikow
Else
Odczen = 0
Reset Led4
End If
 
If Mled = 2 Or Mled = 4 Or Mled = 6 Or Mled = 8 Or Mled = 0 And Programn <> 4 And Programn <> 5 And Programn <> 6 And Programn <> 7 Then 'wlaczenie zapisu
Loggeren = 1 'flaga zapisu
Set Led1 'sygnalizacjal zapisu danych
Else
Loggeren = 0
Loggeren1 = 1
Reset Led1
End If
 
Call Logger
Loop
 
'**************************** Program 1 **********************************************
 
'*************************************************************************************
Program1:
Call Odczyt
Call Gettime 'odczyt zegara
Call Disp 'procedura wyswietlenia na lcd
Return
'**************************** Program 2 **********************************************
 
'*************************************************************************************
Program2:
Programn = 2
 
Call Gettime 'pobierz czas
 
If Wyniki = 1 Then 'co 60 licznik zmienia sie wyswietlanie wyniku
Call Odczyt 'odczytaj dane z czujnikow
Call Zegar_duze
Dthes = 1 'wyswietl zegar
End If
 
If Wyniki = 2 Then
Call Odczyt
Call Cisnienie_duze 'wyswietl cisnienie
End If
 
If Wyniki = 3 Then
Call Odczyt
Call Temp_duze_bmp 'wyswietl temerature z bmp85
End If
 
If Wyniki = 4 Then
Call Odczyt
Call Temp_duze 'wyswietl temerature z dth22
End If
 
If Wyniki = 5 Then
Call Wilg_duze
Loggerenr = 1
Iloscwykres = 0 'wyswietl wilgotnosc z dth22
End If
 
If Wyniki = 6 Then
Call Wykres
End If
 
'Locate 8 , 28
'Lcd ; M ; " " ; Odczen ; 'zmienna na lcd do sprawdzenia
Locate 8 , 30
Lcd Czas_pcf ; " "
 
Return
 
'**************************** Program 3 **********************************************
 
'*************************************************************************************
Program3:
Programn = 3
Call Wykres
Return
'**************************** Program 4 **********************************************
 
'*************************************************************************************
Program4:
Programn = 4 'odczyt calej pamieci
 
Danaw = 0
Gosub Zapis_24c256
 
Gosub Odczyt_24c256
Locate 1 , 1
Lcd "kasowanie i odczyt pamieci i2c"
Locate 2 , 1
Lcd "adres pamieci= " ; Adrespam ; " " "dana= " ; Danar ; " "
Locate 3 , 1
Lcd "adrespam= " ; Spc(1) ; Hex(adrespam) ; Spc(6) "danar= " Spc(1) ; Hex(danar)
Print "adrespam=" ; Spc(1) ; Hex(adrespam) ; " " ; Adrespam ; Spc(3) "danar= " Spc(1) ; Hex(danar)
Adrespam = Adrespam + 1
 
If Adrespam = 100 Then
Adrespam = 32760
Odczyt_24c256
Print "adrespam=" ; Spc(1) ; Adrespam ; Spc(3) ; "danarold= " ; Spc(1) ; Hex(danar)
Danaw = 0
Gosub Zapis_24c256
Print "adrespam=" ; Spc(1) ; Adrespam ; Spc(3) ; "danarnew= " ; Spc(1) ; Hex(danaw)
Odczyt_24c256
Print "adrespam=" ; Spc(1) ; Adrespam ; Spc(3) ; "danarnewak= " ; Spc(1) ; Hex(danaw)
Adrespam = 32761
Odczyt_24c256
Print "adrespam=" ; Spc(1) ; Adrespam ; Spc(3) ; "danarold= " ; Spc(1) ; Hex(danar)
Danaw = 0
Gosub Zapis_24c256
Print "adrespam=" ; Spc(1) ; Adrespam ; Spc(3) ; "danarnew= " ; Spc(1) ; Hex(danaw)
Odczyt_24c256
Print "adrespam=" ; Spc(1) ; Adrespam ; Spc(3) ; "danarnewak= " ; Spc(1) ; Hex(danaw)
Adrespam = 101
End If
 
If Adrespam = 31920 Then
Adrespam = 0
Programn = 2
Cls
Call Program2
End If
 
Return
 
'**************************** Program 5 **********************************************
 
'*************************************************************************************
Program5:
 
Line(0 , 0) -(240 , 0) , 255 ' horiz linia
Line(0 , 32) -(160 , 32) , 255 'LINE(X0,Y0) - (X1,Y1), on/off
Line(0 , 63) -(240 , 63) , 255 ' vertical linia
 
Line(0 , 0) -(0 , 63) , 255
Line(80 , 0) -(80 , 63) , 255
Line(160 , 0) -(160 , 63) , 255
Line(239 , 0) -(239 , 63) , 255
 
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
If Bmpe = 1 Then
Call Messen 'odczyt cisnienia i temp
Tbmp = Tbmp / 10
Temperatur = Fusing(tbmp , "###.##")
Druck = P
Druck = Druck / 100
Druck = Druck + 16
Luftdruck = Fusing(druck , "####.##")
End If
 
'If Dse = 1 Then
' Call Rtemp 'odczyt temp ds-a
'End If
 
If Dthe = 1 And Dthes = 1 Then
Call Get_th(th , Hh) 'odczyt wilgotnosc
End If
 
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Locate 2 , 2 'opis na lcd
Lcd "Temp.dom"
Locate 2 , 15
Lcd "Cisnienie"
Locate 4 , 2
Lcd Temperatur ; " C" ; " "
Locate 4 , 15
Lcd Luftdruck ; " hPa"
 
Locate 6 , 2
Lcd "Temp.zew"
Locate 6 , 15
Lcd "Wilgotnosc"
Locate 8 , 2
Lcd ; Napis ; " C " ; " "
Locate 8 , 15
Lcd ; Hh ; "%" ; " "
 
If Th > 260 Then 'rysunki pogodowe
Showpic 181 , 1 , Hot
End If
 
If Th < 260 And Th > 0 And Druck < 1010 Then
Showpic 175 , 1 , Cloudy
End If
 
If Th < 0 Then
Showpic 175 , 1 , Snow
End If
 
If Hh > 60 Or Druck < 1005 Then
Showpic 175 , 1 , Rain
End If
 
If H = 1 Or Th = 0 Then
Showpic 175 , 1 , Error
End If
 
Return
 
'**************************** Program 6 **********************************************
 
'*************************************************************************************
 
'**************************** Program 7 **********************************************
 
'*************************************************************************************
 
'**************************** Program 8 **********************************************
 
'*************************************************************************************
 
'**************************** Program 9 **********************************************
 
'*************************************************************************************
 
'**************************** Dane do rs-a **************************************
 
'*************************************************************************************
Rs:
 
' Print "adrespam =" ; Spc(1) ; Adrespam ; Spc(6) ; "dana=" ; Spc(1) ; Dana ; Spc(6) ; "danah =" ; Spc(1) ; Danah ; Spc(6) ; "danal =" ; Spc(1) ; Danal ; Spc(6) ; "danasum =" ; Spc(1) ; Danasum
' Print "adrespam =" ; Spc(1) ; Hex(adrespam) ; Spc(6) ; "dana=" ; Spc(1) ; Hex(dana) ; Spc(6) ; "danah =" ; Spc(1) ; Hex(danah) ; Spc(6) ; "danal =" ; Spc(1) ; Hex(danal) ; Spc(6) ; "danasum =" ; Spc(1) ; Hex(danasum)
' Print "----------------------------------------------------"
' Print "Dtempds " ; Tempds 'zapis temp ds
' Print "Dtempbmp " ; Tbmp1 'zapis temp bmp
'Print "Dh " ; Hh 'zapis wilgotnosci
'Print "Dcis " ; Ppam 'zapis cisnienia
'Print "czas----------------------------------------------"
'Print "Ddzien " ; Day 'zapis dnia
'Print "Dmies " ; Month 'zapis miesiaca
'Print "Dgodz " ; H 'zapis godziny
'Print "Dmin " ; M
'Print "----------------------------------------------------"
Print "adrespam =" ; " " ; Adrespam ; " " ; "Bbyte =" ; " " ; Hex(bbyte) ; " " ; "Danaw =" ; " " ; Hex(danaw) ; " " ; Danaw ; " " ; ; "danal =" ; " " ; Hex(danal) ; " " ; "danah =" ; " " ; Hex(danah) ; " "
 
Return
 
'**************************** Wyswietlanie wynikow ***********************************
 
'*************************************************************************************
 
Disp: 'tylko program 1
 
Locate 1 , 1
Lcd "Temperatura w domu: " ; Temperatur ; " C" ; " "
Locate 2 , 1
Lcd "Cisnienie : " ; Luftdruck ; " hPa"
If Th = 0 And Hh = 1 Then
Locate 3 , 1
Lcd "Temperatura na dworze: " ; "Error" ; " C " ; " "
Locate 4 , 1
Lcd "Wilgotnosc powietrza: " ; "Error" ; "%" ; " "
Else
Locate 3 , 1
Lcd "Temperatura na dworze: " ; Napis ; " C " ; " "
Locate 4 , 1
Lcd "Wilgotnosc powietrza: " ; Hh ; "%" ; " "
End If
 
'********************************************'zegar na lcd
Locate 8 , 1
Lcd Czas_pcf ; " " ; Data_pcf ; " "
Locate 8 , 22
 
Select Case Weekdays
Case 0 : Lcd "Poniedzialek"
Case 1 : Lcd "Wtorek"
Case 2 : Lcd "Sroda"
Case 3 : Lcd "Czwartek"
Case 4 : Lcd "Piatek"
Case 5 : Lcd "Sobota"
Case 6 : Lcd "Niedziela"
End Select
 
'******************************************** grafika
If Th > 260 Then 'rysunki pogodowe, mozna zmienic sa dwa razy teraz dla optymilizacji
Showpic 185 , 0 , Hot
End If
 
If Th < 260 And Th > 0 And Hh < 45 Then
Showpic 185 , 0 , Cloudy
End If
 
If Th < 0 Then
Showpic 185 , 0 , Snow
End If
 
If Hh > 45 Or Druck < 1005 Then
Showpic 185 , 0 , Rain
End If
 
If H = 1 Or Th = 0 Then
Showpic 185 , 0 , Error
End If
 
Return
 
'**************************** kasowanie wyswietlacza ***********************************
 
'*************************************************************************************
 
Clslcd:
 
For X = 0 To 240 'czyszczenie pikseli (zapisanie 0) dla osi x
For Y = 0 To 64 'czyszczenie pikseli (zapisanie 0) dla osi y
Pset X , Y , 0 ' zapisanie czystych pixeli na caly ekran
Next X
Next Y
 
'dane do rs-a
Return
 
'**************************** Ustawianie zegara **************************************
 
'*************************************************************************************
Ustaw_zegar:
Programn = 5
 
Cls
Menu = 1
 
Do
 
If Menu > 4 Then Menu = 1
 
Debounce Sw1 , 0 , Menu_incr , Sub
 
Select Case Menu
Case 1 :
Locate 1 , 1
Lcd "MENU > Ustawianie czasu "
Waitms 150
 
Toggle Ledsw
Set Led1
Set Led2
Reset Led3
Reset Led4
Set Led5
 
Debounce Sw5 , 0 , Main : Debounce Sw2 , 0 , Menu_dt , Sub
Case 2 :
Locate 1 , 1
Lcd "MENU > Ustawianie podswietlenia dzien "
Waitms 150
Toggle Ledsw
Set Led1
Reset Led2
Set Led3
Set Led4
Reset Led5
Debounce Sw5 , 0 , Main : Debounce Sw3 , 0 , Menu_pods , Sub
Case 3 :
Locate 1 , 1
Lcd "MENU > Ustawianie podswietlenia noc " ; Spc(4)
Waitms 150
Set Ledsw
Reset Led1
Reset Led2
Reset Led3
Reset Led4
Reset Led5
 
Debounce Sw5 , 0 , Main : Debounce Sw4 , 0 , Menu_pods_noc , Sub
Case 4 :
Locate 1 , 1
Lcd "MENU > Ustawianie loggera " ; Spc(1)
Waitms 150
Set Ledsw
Reset Led1
Reset Led2
Reset Led3
Reset Led4
Reset Led5
Debounce Sw5 , 0 , Main : Debounce Sw3 , 0 , Menu_dt , Sub
End Select
 
Loop
Return
 
'**********************zwieksz zmienna menu*************************
Menu_incr:
Incr Menu
Return
 
'**************************** Ustawianie zegara Menu_dt*******************************
 
'*************************************************************************************
 
Menu_dt:
 
Menu = 1
Zmiany = 0
 
Do
 
Debounce Sw1 , 0 , Menu_incr , Sub
Toggle Ledsw
Set Led1
Reset Led2
Set Led3
Set Led4
Reset Led5
 
Select Case Menu
Case 1 :
Locate 1 , 1
Lcd "MENU > Ustaw godzine "
 
Gosub Czas_menu
Locate 3 , 1
Lcd Czas_pcf ; " " ; Data_pcf
Locate 4 , 1
Lcd "==" ; Spc(18)
 
If Sw4 = 0 Then
Incr H
If H > 23 Then H = 0
Waitms 300
End If
 
If Sw3 = 0 Then
Decr H
If H = 255 Then H = 23
Waitms 300
End If
 
Case 2 :
Locate 1 , 1
Lcd "MENU > Ustaw minuty "
 
Gosub Czas_menu
Locate 3 , 1
Lcd Czas_pcf ; " " ; Data_pcf
Locate 4 , 1
Lcd Spc(3) ; "==" ; Spc(15)
 
If Sw4 = 0 Then
Incr M
If M > 59 Then M = 0
Waitms 300
End If
 
If Sw3 = 0 Then
Decr M
If M = 255 Then M = 59
Waitms 300
End If
 
Case 3 :
Locate 1 , 1
Lcd "MENU > Ustaw sekundy "
 
Gosub Czas_menu
Locate 3 , 1
Lcd Czas_pcf ; " " ; Data_pcf
Locate 4 , 1
Lcd Spc(6) ; "==" ; Spc(12)
 
If Sw4 = 0 Then
Incr S
If S > 59 Then S = 0
Waitms 300
End If
 
If Sw3 = 0 Then
Decr S
If S = 255 Then S = 59
Waitms 300
End If
 
Case 4 :
Locate 1 , 1
Lcd "MENU > Ustaw dzien "
 
Gosub Czas_menu
Locate 3 , 1
Lcd Czas_pcf ; " " ; Data_pcf
Locate 4 , 1
Lcd Spc(10) ; "==" ; Spc(8)
 
If Sw4 = 0 Then
Incr Day
If Day > 31 Then Day = 1
Waitms 300
End If
 
If Sw3 = 0 Then
Decr Day
If Day = 0 Then Day = 31
Waitms 300
End If
 
Case 5 :
Locate 1 , 1
Lcd "MENU > Ustaw miesiac "
 
Gosub Czas_menu
Locate 3 , 1
Lcd Czas_pcf ; " " ; Data_pcf
Locate 4 , 1
Lcd Spc(13) ; "==" ; Spc(5)
 
If Sw4 = 0 Then
Incr Month
If Month > 12 Then Month = 1
Waitms 300
End If
 
If Sw3 = 0 Then
Decr Month
If Month = 0 Then Month = 12
Waitms 300
End If
 
Case 6 :
Locate 1 , 1
Lcd "MENU > Ustaw rok "
 
Gosub Czas_menu
Locate 3 , 1
Lcd Czas_pcf ; " " ; Data_pcf
Locate 4 , 1
Lcd Spc(16) ; "===="
 
If Sw4 = 0 Then
Incr Year
If Year > 14 Then Year = 12
Waitms 300
End If
 
If Sw3 = 0 Then
Decr Year
If Year = 11 Then Year = 14
Waitms 300
End If
 
Case 7 :
Locate 1 , 1
Lcd "MENU > Ustaw dzien tygodnia "
Locate 4 , 1
Lcd Spc(15) ; " "
Locate 3 , 1
Select Case Weekdays
Case 0 :
Lcd "Poniedzialek" ; Spc(8)
 
Case 1 :
Lcd "Wtorek" ; Spc(14)
 
Case 2 :
Lcd "Sroda" ; Spc(15)
 
Case 3 :
Lcd "Czwartek" ; Spc(12)
 
Case 4 :
Lcd "Piatek" ; Spc(14)
 
Case 5 :
Lcd "Sobota" ; Spc(14)
 
Case 6 :
Lcd "Niedziela" ; Spc(11)
End Select
 
If Sw4 = 0 Then
Incr Weekdays
If Weekdays > 6 Then Weekdays = 0
Waitms 300
End If
 
If Sw3 = 0 Then
Decr Weekdays
If Weekdays = 255 Then Weekdays = 6
Waitms 300
End If
 
Case 8 :
Locate 1 , 1
Lcd "Zapisac czas? " ; Spc(4)
Locate 3 , 1
Lcd Spc(3) ; "Tak Nie" ; Spc(9)
Locate 4 , 1
 
If Zmiany = 1 Then
Lcd Spc(3) ; "===" ; Spc(14)
Else
Lcd Spc(8) ; "===" ; Spc(9)
End If
 
If Sw3 = 0 Or Sw4 = 0 Then
Toggle Zmiany
Waitms 500
End If
 
Case 9 :
If Zmiany = 1 Then
Gosub Settime
Cls
Locate 2 , 1
Lcd " Czas ustawiony "
Wait 1
Gosub Main
Else
Cls
Locate 2 , 1
Lcd "Czas nie ustawiony "
Wait 1
Gosub Main
End If
 
End Select
 
Loop
'***************************menu podswietlenia**************************
Menu_pods:
Do
 
Locate 1 , 1
Lcd "MENU > Ustaw podswietlenie na dzien "
Locate 2 , 1
Lcd "jasnosc =" ; Podsw ; " "
Set Ledsw
Set Led1
Reset Led2
Set Led3
Set Led4
Reset Led5
 
If Sw4 = 0 Then
Incr Podsw
Waitms 100
End If
 
If Sw3 = 0 Then
Decr Podsw
Waitms 100
End If
 
Ocr1b = Podsw
 
If Sw1 = 0 Then
Writeeeprom Podsw , 1
Gosub Ustaw_zegar
End If
 
Loop
'***************************menu podswietlenia noc**************************
Menu_pods_noc:
Do
Locate 1 , 1
Lcd "MENU > Ustaw podswietlenie na noc "
Locate 2 , 1
Lcd "jasnosc =" ; Podswnoc ; " "
Set Ledsw
Set Led1
Reset Led2
Set Led3
Set Led4
Reset Led5
 
If Sw4 = 0 Then
Incr Podswnoc
Waitms 100
End If
 
If Sw3 = 0 Then
Decr Podswnoc
Waitms 100
End If
 
Ocr1b = Podswnoc
 
If Sw1 = 0 Then
Writeeeprom Podswnoc , 2
Gosub Ustaw_zegar
End If
 
Loop
 
'**************************** Ustawianie zegara Settime **************************
 
'*************************************************************************************
 
Settime:
 
S_bcd = Makebcd(s) ' konwertowanie na bcd
M_bcd = Makebcd(m)
H_bcd = Makebcd(h)
 
Year = Year - 12
Year_bcd = Makebcd(year)
Shift Year_bcd , Left , 6
Day_bcd = Makebcd(day)
Yd_bcd = Year_bcd Or Day_bcd
 
Weekdays_bcd = Makebcd(weekdays)
Shift Weekdays_bcd , Left , 5
Month_bcd = Makebcd(month)
Wm_bcd = Weekdays_bcd Or Month_bcd
 
I2cstart ' zapis zmiennych do pcf
I2cwbyte 160
I2cwbyte 2
I2cwbyte S_bcd
I2cwbyte M_bcd
I2cwbyte H_bcd
I2cwbyte Yd_bcd
I2cwbyte Wm_bcd
I2cstop
 
Return
 
'**************************** Ustawianie zegara Czas_menu **************************
 
'*************************************************************************************
 
Czas_menu: 'konwersja do wyswietlania na lcd
 
Ss = Str(h)
Ss = Format(ss , "00")
Czas_pcf = Ss + ":"
 
Ss = Str(m)
Ss = Format(ss , "00")
Czas_pcf = Czas_pcf + Ss + ":"
 
Ss = Str(s)
Ss = Format(ss , "00")
Czas_pcf = Czas_pcf + Ss
 
Ss = Str(day)
Ss = Format(ss , "00")
Data_pcf = Ss + "."
 
Ss = Str(month)
Ss = Format(ss , "00")
Data_pcf = Data_pcf + Ss + ".20"
 
Ss = Str(year)
Ss = Format(ss , "00")
Data_pcf = Data_pcf + Ss
 
Return
 
'****************************Odczyt cisnienia i temperatury **************************
 
'*************************************************************************************
Sub Messen
Call Schreibe_bmp085(&Hf4 , &H2E)
Adres = &HF6
Call Lese_roh_daten
Shift Msb , Left , 8
Ut = Msb + Lsb
Call Berechne_temp
Call Schreibe_bmp085(&Hf4 , &H74 )
Adres = &HF6
Call Lese_roh_daten
Shift Msb , Left , 16
Shift Lsb , Left , 8
Up = Msb + Lsb
Shift Up , Right , 6
Call Berechne_druck
Ppam = P
Ppam = Ppam / 100 'zmienna do zachowania w pamieci
Ppam = Ppam + 16
End Sub
 
Sub Berechne_temp
Ut = Ut - Ac6
2potenz15 = 2 ^ 15
Ac5a = Ac5 / 2potenz15
X1t = Ut * Ac5a
 
2potenz11 = 2 ^ 11
Mc2 = Mc * 2potenz11
X3 = X1t + Md
X2 = Mc2 / X3
 
B5 = X1t + X2
2potenz4 = 2 ^ 4
T2 = B5 + 8
Tbmp = T2 / 2potenz4
Tbmp1 = Tbmp
Dtempbmp = Tbmp1
End Sub
 
Sub Berechne_druck
B6 = B5 - 4000
2potenz12 = 2 ^ 12
B6a = B6 * B6
B6a = B6a / 2potenz12
X1 = B2 * B6a
X1 = X1 / 2potenz11
X2 = Ac2 * B6
X2 = X2 / 2potenz11
X3 = X1 + X2
Ac1a = Ac1 * 4
Ac1a = Ac1a + X3
Shift Ac1a , Left , 2
Ac1a = Ac1a + 2
B3 = Ac1a / 4
2potenz13 = 2 ^ 13
B6a = B6 / 2potenz13
X1 = Ac3 * B6a
B6a = B6 * B6
B6a = B6a / 2potenz12
X2 = B1 * B6a
2potenz16 = 2 ^ 16
X2 = X2 / 2potenz16
X3 = X1 + X2
X3 = X3 + 2
2potenz2 = 2 ^ 2
X3 = X3 / 2potenz2
B4 = X3 + 32768
B4 = B4 * Ac4
B4 = B4 / 2potenz15
If B4 <= 0 Then B4 = B4 * -1
 
B7 = Up - B3
B3a = 50000
Shift B3a , Right , 2 '
B7 = B7 * B3a
If B7 <= 0 Then B7 = B7 * -1
If B7 < &H80000000 Then
P = B7 * 2
P = P / B4
Else
P = B7 / B4
P = P * 2
End If
 
2potenz8 = 2 ^ 8
P2 = P / 2potenz8
X1 = P2 * P2
X1 = X1 * 3038
X1 = X1 / 2potenz16
X2 = -7357 * P
X2 = X2 / 2potenz16
P2 = P
P = X2 + 3791
P = P + X1
P = P / 2potenz4
P = P + P2
End Sub
 
Sub Lese_kalib_data
Lese_start = 1
Adres = &HAA
Call Lese
Ac1 = Msb + Lsb
Adres = Adres + 1
Call Lese
Ac2 = Msb + Lsb
Adres = Adres + 1
Call Lese
Ac3 = Msb + Lsb
Adres = Adres + 1
Call Lese
Ac4 = Msb + Lsb
Adres = Adres + 1
Call Lese
Ac5 = Msb + Lsb
Adres = Adres + 1
Call Lese
Ac6 = Msb + Lsb
Adres = Adres + 1
Call Lese
B1 = Msb + Lsb
Adres = Adres + 1
Call Lese
B2 = Msb + Lsb
Adres = Adres + 1
Call Lese
Mb = Msb + Lsb
Adres = Adres + 1
Call Lese
Mc = Msb + Lsb
Adres = Adres + 1
Call Lese
Md = Msb + Lsb
Adres = Adres + 1
End Sub
 
Sub Lese_roh_daten
Call Lese_bmp085(adres , Wert)
Msb = Wert
Adres = Adres + 1
Call Lese_bmp085(adres , Wert)
Lsb = Wert
End Sub
 
Sub Schreibe_bmp085(byval Adres As Byte , Byval Wert As Byte)
I2cstart
I2cwbyte Addr_schreiben
I2cwbyte Adres
I2cwbyte Wert
I2cstop
Waitms 10
End Sub
 
Lese:
Call Lese_bmp085(adres , Wert)
Msb = Wert
Adres = Adres + 1
Call Lese_bmp085(adres , Wert)
Lsb = Wert
Shift Msb , Left , 8
Return
 
Sub Lese_bmp085(byval Adres As Byte , Wert As Byte)
I2cstart
I2cwbyte Addr_schreiben
I2cwbyte Adres
I2cstart
I2cwbyte Addr_lesen
I2crbyte Wert , Nack
I2cstop
Waitms 10
End Sub
 
'**************************** Odczyt witgotnosci**************************************
 
'*************************************************************************************
Sub Get_th(th As Byte , Hh As Word)
 
If Dthes = 1 Then
 
Count = 0
Sensor_data = ""
Set Dht_io_set
Reset Dht_put
Waitms 25
 
Set Dht_put
Waitus 40
Reset Dht_io_set
Waitus 40
If Dht_get = 1 Then
Hh = 1
Exit Sub
End If
 
Waitus 80
If Dht_get = 0 Then
Hh = 2
Exit Sub
End If
 
While Dht_get = 1 : Wend
 
Do
While Dht_get = 0 : Wend
Waitus 30
If Dht_get = 1 Then
Sensor_data = Sensor_data + "1"
While Dht_get = 1 : Wend
Else
Sensor_data = Sensor_data + "0"
End If
Incr Count
Loop Until Count = 40
 
Set Dht_io_set
Set Dht_put
 
'Sensor_data = 0000000011001001100000010100011100010001
'0000 0011 1110 0111 0000 0000 1010 0001 10001011
'Print "Sensor_datah= " ; Sensor_data
Tmp_str8h = Left(sensor_data , 16)
Hh = Binval(tmp_str8h)
 
'Print "hh= " ; Tmp_str8h
'Print "hh=" ; Hh
 
Tmp_str8z = Mid(sensor_data , 17 , 4)
Znakdth = Binval(tmp_str8z)
 
'Print "znak=" ; Tmp_str8z
'Print "znak=" ; Znakdth
 
Tmp_str8t = Mid(sensor_data , 21 , 12)
Th = Binval(tmp_str8t)
 
'Print "th= " ; Tmp_str8t
'Print "th=" ; Th
 
If Znakdth = 8 Then 'znak ujemny
Th = Th * -1
End If
 
'If Th > 300 Then
' Th = Th * -1
'End If
 
Tmp_str8c = Right(sensor_data , 8)
Crc = Binval(tmp_str8c)
'Print "crc= " ; Tmp_str8c
'Print "crc=" ; Crc
 
'Mybyte = Th + Hh
'If Mybyte <> Crc Then
' Hh = 3
'End If
 
Dthes = 0
Dth = Th
Dhh = Hh
Napis = Str(th)
Napis = Format(napis , " 0.0")
 
End Sub
End If
Return
'**************************** Zegar PCF8583 ******************************************
 
'*************************************************************************************
 
Sub Gettime
I2cstart
I2cwbyte 160 ' wysylanie adresu odczytu
I2cwbyte 2
I2cstart
I2cwbyte 161
I2crbyte S , Ack ' sekundy
I2crbyte M , Ack ' minuty
I2crbyte H , Ack ' godziny
I2crbyte Yd , Ack ' rok/dni
I2crbyte Wm , Nack ' tygodnie/miesiace
I2cstop
 
Year = Yd ' konwertowanie rok/dni
Shift Year , Right , 6
Year = Year + Makebcd(12)
Yd.7 = 0 : Yd.6 = 0
 
Weekdays = Wm ' konwertowanie tygodnie/miesiace
Shift Weekdays , Right , 5
Wm.7 = 0 : Wm.6 = 0 : Wm.5 = 0
 
Czas_pcf = Bcd(h) + ":" + Bcd(m) + ":" + Bcd(s) ' czas jako strong
Data_pcf = Bcd(yd) + "." + Bcd(wm) + ".20" + Bcd(year) ' data jako string
 
S = Makedec(s) ' konwetrowanie na dziesietne
M = Makedec(m)
H = Makedec(h)
Year = Makedec(year)
Day = Makedec(yd)
Weekdays = Makedec(weekdays)
Month = Makedec(wm)
Sek = S
End Sub
Return
 
'**************************** Odczyrt ds18B20 ****************************************
 
'*************************************************************************************
 
'Sub Rtemp:
' 1wreset
' 1wwrite &HCC
' 1wwrite &H44
' Waitms 750
' 1wreset
' 1wwrite &HCC
' 1wwrite &HBE
' Temp = 1wread(2)
' Temp = Temp * 10
' Temp = Temp / 16
' Tempds = Temp 'tempds-zmienna do zachowania w pamieci
' Napis = Str(temp)
' Napis = Format(napis , " 0.0")
' End Sub
'Return
 
'****************************zegar duze fonty ****************************************
 
'*************************************************************************************
Zegar_duze:
Disable Interrupts
 
Sk = S
Mk = M
Hk = H
 
'---------------------------------------------------------------------sekundy
If S = 0 Then
Showpic 170 , 0 , 0
Showpic 204 , 0 , 0
End If
 
If S > 0 And S < 10 Then
Showpic 170 , 0 , 0
End If
 
If S > 9 And S < 20 Then
Showpic 170 , 0 , 1
Sk = S - 10
End If
 
If S > 19 And S < 30 Then
Showpic 170 , 0 , 2
Sk = S - 20
End If
 
If S > 29 And S < 40 Then
Showpic 170 , 0 , 3
Sk = S - 30
End If
 
If S > 39 And S < 50 Then
Showpic 170 , 0 , 4
Sk = S - 40
End If
 
If S > 49 And S < 60 Then
Showpic 170 , 0 , 5
Sk = S - 50
End If
 
Select Case Sk
Case 0 : Showpic 204 , 0 , 0
Call Krop0
Case 1 : Showpic 204 , 0 , 1
Call Krop1
Case 2 : Showpic 204 , 0 , 2
Call Krop0
Case 3 : Showpic 204 , 0 , 3
Call Krop1
Case 4 : Showpic 204 , 0 , 4
Call Krop0
Case 5 : Showpic 204 , 0 , 5
Call Krop1
Case 6 : Showpic 204 , 0 , 6
Call Krop0
Case 7 : Showpic 204 , 0 , 7
Call Krop1
Case 8 : Showpic 204 , 0 , 8
Call Krop0
Case 9 : Showpic 204 , 0 , 9
Call Krop1
End Select
 
'---------------------------------------------------------------------minuty
If M = 0 Then
Showpic 87 , 0 , 0
Showpic 121 , 0 , 0
End If
 
If M > 0 And M < 10 Then
Showpic 87 , 0 , 0
End If
 
If M > 9 And M < 20 Then
Showpic 87 , 0 , 1
Mk = M - 10
End If
 
If M > 19 And M < 30 Then
Showpic 87 , 0 , 2
Mk = M - 20
End If
 
If M > 29 And M < 40 Then
Showpic 87 , 0 , 3
Mk = M - 30
End If
 
If M > 39 And M < 50 Then
Showpic 87 , 0 , 4
Mk = M - 40
End If
 
If M > 49 And M < 60 Then
Showpic 87 , 0 , 5
Mk = M - 50
End If
 
Cyfra = Mk
P1 = 121
Zero = 1
Call Selectcase
 
'---------------------------------------------------------------------godziny
If H = 0 Then
Showpic 0 , 0 , 0
Showpic 37 , 0 , 0
End If
 
If H > 0 And H < 10 Then
Showpic 0 , 0 , 0
End If
 
If H > 9 And H < 20 Then
Showpic 0 , 0 , 1
Hk = H - 10
End If
 
If H > 19 And H < 24 Then
Showpic 0 , 0 , 2
Hk = H - 20
End If
 
Cyfra = Hk
P1 = 37
Zero = 1
Call Selectcase
 
Showpic 75 , 17 , Kro 'oddzielenie godzin i minut
Showpic 75 , 32 , Kro
 
Locate 8 , 1
Lcd "Data : " ; Data_pcf ; Spc(10)
 
Enable Interrupts
 
Return
 
Krop0: 'migajace kropki sekundowe pusta kropka
Showpic 158 , 17 , Kro
Showpic 158 , 32 , Kro
Return
 
Krop1: 'migajace kropki sekundowe pelna kropka
Showpic 158 , 17 , Krop
Showpic 158 , 32 , Krop
Return
 
'****************************Cisnienie_duze ******************************************
 
'************************************************************************************
'************************ Obliczenia dls duzych fontow *************************
Cisnienie_duze:
 
Cis_duze = Druck
 
Cis_tys = Cis_duze / 1000 'rozklad na cyfry
Cis_set = Cis_duze Mod 1000
Cis_set = Cis_set / 100
Cis_dzie = Cis_duze Mod 100
Cis_dzie = Cis_dzie / 10
Cis_jed = Cis_duze Mod 10
 
Cyfra = Cis_tys
P1 = 0
Zero = 0
Call Selectcase
 
Cyfra = Cis_set
P1 = 37
Zero = 1
Call Selectcase
 
Cyfra = Cis_dzie
P1 = 74
Zero = 1
Call Selectcase
 
Cyfra = Cis_jed
P1 = 111
Zero = 1
Call Selectcase
 
Showpic 149 , 7 , Hpa
Locate 8 , 1
Lcd "Cisnienie atmosferyczne" ; Spc(10)
 
Return
 
'****************************temperatura ds_duze ******************************************
 
'************************************************************************************
Temp_duze:
'ht=odczyt z dth22,Temp=odczyt z ds-a
Tempds = Th
Tempds_set = Tempds Mod 1000
Tempds_set = Tempds_set / 100 'rozklad na cyfry
Tempds_dzie = Tempds Mod 100
Tempds_dzie = Tempds / 10
Tempds_dzie = Tempds_dzie Mod 10
Tempds_jed = Tempds Mod 10
 
If Th = 0 Then
Showpic 74 , 0 , 0
Showpic 123 , 0 , 0
End If
 
If Th > 0 And Tempds_set > 0 Then 'znak +
Showpic 5 , 5 , Dodatnia
End If
 
If Th > 0 And Tempds_set = 0 Then
Showpic 37 , 5 , Dodatnia 'znak +
End If
 
If Th < 0 And Tempds_set < 0 Then 'znak -
Showpic 5 , 5 , Ujemna
End If
 
If Th < 0 And Tempds_set = 0 Then 'znak -
Showpic 37 , 5 , Ujemna
End If
 
Cyfra = Tempds_set
P1 = 37
Zero = 0
Call Selectcase
 
Cyfra = Tempds_dzie
P1 = 74
Zero = 1
Call Selectcase
 
Cyfra = Tempds_jed
P1 = 123
Zero = 1
Call Selectcase
 
Showpic 111 , 40 , Kro
Showpic 160 , 0 , Stopien 'symbol stopnia
 
Locate 8 , 1
Lcd "Temperatura na dworze" ; Spc(10)
 
Return
 
'****************************Temp_duze_bmp ******************************************
 
'************************************************************************************
 
Temp_duze_bmp: 'rozklad na cyfry
 
Tbmp1 = Tbmp * 10 'przeliczenie cisnienia
Tempbmp_set = Tbmp1 Mod 1000
Tempbmp_set = Tempbmp_set / 100
Tempbmp_dzie = Tbmp1 Mod 100
Tempbmp_dzie = Tbmp1 / 10
Tempbmp_dzie = Tempbmp_dzie Mod 10
Tempbmp_jed = Tbmp1 Mod 10
 
If Tbmp = 0 Then '0 jako wynik
Showpic 74 , 0 , 0
Showpic 123 , 0 , 0
End If
 
If Tbmp < 0 Then 'znak -
Showpic 5 , 5 , Ujemna
End If
 
If Tbmp > 0 Then
Showpic 5 , 5 , Dodatnia 'znak +
End If
 
Cyfra = Tempbmp_set
P1 = 37
Zero = 0
Call Selectcase
 
Cyfra = Tempbmp_dzie
P1 = 74
Zero = 1
Call Selectcase
 
Cyfra = Tempbmp_jed
P1 = 123
Zero = 1
Call Selectcase
 
Showpic 111 , 40 , Kro
Showpic 160 , 0 , Stopien 'symbol stopnia
 
Locate 8 , 1
Lcd "Temperatura w domu" ; Spc(10)
 
Return
 
'****************************wilgotnosc_duze ******************************************
 
'************************************************************************************
Wilg_duze:
Hh1 = Hh
If Hh1 < 100 Then
 
Wilg_dzie = Hh1 Mod 100
Wilg_dzie = Hh1 / 10 'rozklad na cyfry
Wilg_jed = Hh1 Mod 10
 
Cyfra = Wilg_dzie
P1 = 37
Zero = 0
Call Selectcase
 
Cyfra = Wilg_jed
P1 = 74
Zero = 1
Call Selectcase
Showpic 111 , 0 , Procent 'znak procenta
 
Else
 
Wilg_set = Hh1 Mod 1000
Wilg_set = Wilg_set / 100
Wilg_dzie = Hh1 Mod 100
Wilg_dzie = Hh1 / 10 'rozklad na cyfry
Wilg_dzie = Wilg_dzie Mod 10
Wilg_jed = Hh1 Mod 10
 
Cyfra = Wilg_set
P1 = 37
Zero = 0
Call Selectcase
 
Cyfra = Wilg_dzie
P1 = 74
Zero = 1
Call Selectcase
 
Cyfra = Wilg_jed
P1 = 123
Zero = 1
 
Call Selectcase
Showpic 111 , 40 , Kro
Showpic 160 , 0 , Procent 'znak procenta
 
End If
 
Locate 8 , 1
Lcd "Wilgotnosc powietrza" ; " "
 
Return
 
'****************************selectcase cyfry ******************************************
 
'************************************************************************************
 
Selectcase: 'wybor cyfry dla duzych fontow
Select Case Cyfra 'dla wszystkich pomiarow
If Zero = 1 Then 'wyswietlanie cyfry 0
Case 0 : Showpic P1 , 0 , 0
End If
End Select
Select Case Cyfra
Case 1 : Showpic P1 , 0 , 1
Case 2 : Showpic P1 , 0 , 2
Case 3 : Showpic P1 , 0 , 3
Case 4 : Showpic P1 , 0 , 4
Case 5 : Showpic P1 , 0 , 5
Case 6 : Showpic P1 , 0 , 6
Case 7 : Showpic P1 , 0 , 7
Case 8 : Showpic P1 , 0 , 8
Case 9 : Showpic P1 , 0 , 9
Case -1 : Showpic P1 , 0 , 1
Case -2 : Showpic P1 , 0 , 2
Case -3 : Showpic P1 , 0 , 3
Case -4 : Showpic P1 , 0 , 4
Case -5 : Showpic P1 , 0 , 5
Case -6 : Showpic P1 , 0 , 6
Case -7 : Showpic P1 , 0 , 7
Case -8 : Showpic P1 , 0 , 8
Case -9 : Showpic P1 , 0 , 9
End Select
Return
 
'**************************** odczyt czujnikow, ********************************************
 
'*************************************************************************************
 
Odczyt: 'odczyt co 10 min
 
If Bmpe = 1 And Odczen = 1 And Wyniki = 2 Then 'wlacza sie jak spelnione bmpe i odczen
Printen = 1
Printen = 1
Call Messen 'odczyt cisnienia i temp
Tbmp = Tbmp / 10
Temperatur = Fusing(tbmp , "###.##")
Druck = P
Druck = Druck / 100
Druck = Druck + 16
Luftdruck = Fusing(druck , "####.##")
End If
 
If Printen = 0 And Printen1 = 0 And Odczen = 1 Then
'Print "odczyt tbmp" ; " " ; Luftdruck ; " " ; Temperatur
Printen = 1
End If
 
'If Programn = 2 And Dse = 1 And Wyniki = 3 Or Wyniki = 4 And Odczen = 1 Then 'wlacza sie jak spelnione bmpe i odczen
' Call Rtemp 'odczyt temp ds-a
'End If
 
'If Printen = 1 And Printen1 = 0 Then
' Print "odczyt rtemp" ; " " ; Napis
' Printen1 = 1
'End If
 
If Dthe = 1 And Dthes = 1 And Odczen = 1 And Wyniki = 4 Then 'wlacza sie jak spelnione bmpe i odczen
'Print "odczyt dth enable"
Call Get_th(th , Hh) 'odczyt wilgotnosc
End If
 
Return
 
'**************************** zapis odczyt 24c256 pamieci ********************************************
 
'*************************************************************************************
 
Zapis_24c256:
I2cstart
I2cwbyte &B10100110 'adres pamieci
Bbyte = High(adrespam)
I2cwbyte Bbyte
Bbyte = Low(adrespam)
I2cwbyte Bbyte
I2cwbyte Danaw 'moja dana
I2cstop
Waitms 10
Return
 
Odczyt_24c256:
I2cstart
I2cwbyte &B10100110 'adres pamieci
Bbyte = High(adrespam)
I2cwbyte Bbyte
Bbyte = Low(adrespam)
I2cwbyte Bbyte
I2cstart
I2cwbyte &B10100111 'ostatni bajt a dla odczytu
I2crbyte Danar , Nack
I2cstop
Waitms 10
Return
 
'**************************** logger ********************************************
 
'********************************************************************************
Logger:
 
'adresacja pamieci od 0 do 31920
 
Dth = Th 'zapis temp tdh22
Dtempbmp = Tbmp1 'zapis temp bmp
Dhh = Hh 'zapis wilgotnosci tdh22
Dcis = Ppam 'zapis cisnienia
Ddzien = Day 'zapis dnia
Dmies = Month 'zapis miesiaca
Dgodz = H 'zapis godziny
Dmin = M
 
If Dtempbmp = 0 Or Hh = 0 And Loggeren = 1 And Programn <> 4 And Loglicz = 0 And Loglicz1 = 0 Then
Call Ostadres
Print "logger-brak danych"
End If
 
If Loggeren = 1 And Loggeren1 = 1 And Programn <> 4 And Dtempbmp <> 0 And Dth <> 0 Then
Loglicz = 1
Call Loggerwrite
Adrespam = Adrespam + 1
Print "logger-zapis danych do pamieci------------------------------"
End If
'Print "logger"
'Print "Loggeren= " ; Loggeren ; " " ; "Loggeren1= " ; Loggeren1 ; " " ; "Programn= " ; " " ; Programn
 
Return
 
'**********************************write**************************************
Loggerwrite:
 
Set Led2 ''sygnalizacja zapisu do pamieci
 
If Selbytew = 8 Then 'ustawienie flagi konca zapisu i zapamietanie ost adresu
Loggeren1 = 0
End If
 
If Selbytew = 9 Then
Selbytew = 1
Print "koniec zapisu do pamieci---------------------------------------"
End If
 
Select Case Selbytew
Case 1 : Danaw = Dth
Case 2 : Danaw = Dtempbmp
Case 3 : Danaw = Dhh
Case 4 : Danaw = Dcis
Case 5 : Danaw = Ddzien
Case 6 : Danaw = Dmies
Case 7 : Danaw = Dgodz
Case 8 : Danaw = Dmin
End Select
 
Bbyte = Adrespam
 
If Selbytew = 1 Or Selbytew = 2 Or Selbytew = 3 Or Selbytew = 4 Then 'jesli dana to nie czas rozbij na bajty
Call Rozklad
'Print "write High dana"
'Call Rs 'zapis symulowany rs-em
Danaw = Danal 'dana do zapisu po rozkladzie=danal
Call Zapis_24c256 'zapis do komorki
Call Rs
Adrespam = Adrespam + 1 'adres+1
'Print "write low dana"
'Call Rs 'zapis symulowany rs-em
Danaw = Danah 'dana do zapisu po rozkladzie=danah
Call Zapis_24c256 'zapis do komorki
Call Rs
Else
'Print "write dana"
Call Zapis_24c256
Call Rs
End If
 
If Selbytew = 8 Then
Print "dane dapisane do pamieci---------------------------------------------"
Print "dthw" ; " " ; Dth
Print "Dtempbmpw" ; " " ; Dtempbmp
Print "dhhw" ; " " ; Dhh
Print "Dcisw" ; " " ; Dcis
Print "Ddzienw" ; " " ; Ddzien
Print "Dmiesw" ; " " ; Dmies
Print "Dgodzw" ; " " ; Dgodz
Print "Dminw" ; " " ; Dmin
End If 'zapis
 
If Selbytew = 8 And Dtempbmp <> 0 And Dth <> 0 And Dhh <> 0 And Dcis <> 0 Then
Set Ledsw
Set Led2
Danaw = Adrespam 'zapis ostatniego adresu, gdzie zakonczyl zapis
Adrespam1 = Adrespam 'adres komorek dla ost=32760 i 32761
Adrespam = 32760
Call Rozklad
Danaw = Danal
Call Zapis_24c256
Adrespam = 32761
Danaw = Danah
Call Zapis_24c256
Print "danarl zap= " ; Hex(danarl) ; " " ; "Danarh zap =" ; Hex(danarh) ; " " ; "adrespam zap =" ; Adrespam
Adrespam = 32760
Call Odczyt_24c256 'odczyt czy dobrze zapisal adres
Danarl = Danar
Adrespam = 32761
Call Odczyt_24c256
Danarh = Danar
Call Sumowanie
Adrespamr = Danasum 'zsumowanie bitow i odczyt adresu zapisanego
Adrespam = Adrespam1
Print "danarl odcz= " ; Hex(danarl) ; " " ; "Danarh odcz= " ; Hex(danarh) ; " " ; "adrespam odcz= " ; Danasum ; " " ; "adrespam= " ; Adrespam
Loglicz = 0
Reset Ledsw
Reset Led2 'przywrocenie ostatniego adresu zapisu
End If
 
Selbytew = Selbytew + 1
 
If Adrespam = 31921 Then '31920/2660 wpisow po 12 bajtow co 30min=>55 dni
Adrespam = 0 'adres 32760 i 32761 zapis ostatniego logowania
End If
Reset Led2
Return
'--------------------------------rozbicie na bajty---------------
 
Rozklad:
Danal = Low(danaw)
Danah = High(danaw)
Return
 
'**********************************read**************************************
Loggerread:
Declare Sub Odczytaj
 
Set Led3
 
If Adrespam <= 1 Then
Print "Adres pam <=1"
Return
Else
'Print "read logger dana----------------------------------"
Adrespam = Adrespam - 1
Call Odczytaj
'Print "adrespam do zczytania jako pierwszy " ; Adrespam
Dminr = Danar 'minuty
'Print "Dminr= " ; Danar
'Print "Dminr= " ; Hex(dminr)
 
Adrespam = Adrespam - 1
Call Odczytaj
Dgodzr = Danar
'Print "Dgodzr= " ; Danar
'Print "Dgodzr= " ; Hex(dgodzr)
 
Adrespam = Adrespam - 1
Call Odczytaj
Dmiesr = Danar
'Print "Ddzienr= " ; Danar
'Print "Ddzienr= " ; Hex(ddzienr)
 
Adrespam = Adrespam - 1
Call Odczytaj
Ddzienr = Danar
'Print "Dmiesr" ; Danar
'Print "Dmiesr" ; Hex(dmiesr)
 
Adrespam = Adrespam - 1
Call Odczytaj
'Print "adrespam do zczytania dwa " ; Adrespam
Danarh = Danar
Adrespam = Adrespam - 1
Call Odczytaj
'Print "adrespam do zczytania dwa " ; Adrespam
'Print "Danar= " ; Hex(danar)
Danarl = Danar
Call Sumowanie
Dcisr = Danasum 'wpisanie cisnienia do odczytu
'Print "Dcisr= " ; Dcisr
 
Adrespam = Adrespam - 1
Call Odczytaj
'Print "adrespam do zczytania dwa " ; Adrespam 'wilgotnosc
'Print "Danar= " ; Hex(danar)
Danarh = Danar
Adrespam = Adrespam - 1
Call Odczytaj
'Print "adrespam do zczytania dwa " ; Adrespam
'Print "Danar= " ; Hex(danar)
Danarl = Danar
Call Sumowanie
Dhhr = Danasum 'wpisanie wilgotnosci do odczytu
'Print "Dhhr= " ; Dhhr
 
Adrespam = Adrespam - 1
Call Odczytaj
'Print "adrespam do zczytania dwa " ; Adrespam 'tem bmp
'Print "Danar= " ; Hex(danar)
Danarh = Danar
Adrespam = Adrespam - 1
Call Odczytaj
'Print "adrespam do zczytania dwa " ; Adrespam
'Print "Danar= " ; Hex(danar)
Danarl = Danar
Call Sumowanie
Dtempbmpr = Danasum 'wpisanie temperatur bmp do odczytu
'Print "dtempbmpr = " ; Dtempbmpr
 
Adrespam = Adrespam - 1
Call Odczytaj
'Print "adrespam do zczytania dwa " ; Adrespam 'temp ds
'Print "Danar= " ; Hex(danar)
Danarh = Danar
Adrespam = Adrespam - 1
Call Odczytaj
'Print "adrespam do zczytania dwa " ; Adrespam
'Print "Danar= " ; Hex(danar)
Danarl = Danar
Call Sumowanie
Dthr = Danasum 'wpisanie temperatur dth22 do odczytu
'Print "Dthr= " ; Dthr
 
'Adrespam = Adrespam - 2
 
'Print "adres pamieci po zczytaniu tablicy " ; Adrespam
 
Reset Led3
Loggerenr = 0
 
Return
End If
 
Return
 
Odczytaj:
Bbyte = Adrespam
Call Odczyt_24c256
Return
 
'**************************** sumowanie ************************************
 
'*******************************************************************************
 
Sumowanie:
Danasum = Makeint(danarl , Danarh) 'skladanie dwoch bajtow
'Print "sumowanie " ; Hex(danarl) ; " " ; Hex(danarh) ; " " ; "suma= " ; Hex(danasum)
Return
 
'**************************** ostatni adres ************************************
 
'*******************************************************************************
 
Ostadres:
Print "odczyt ostatniego adresu"
Loggeren1 = 0
Adrespam = 32760
Call Odczyt_24c256 'odczyt czy dobrze zapisal adres
Danarl = Danar
Adrespam = 32761
Call Odczyt_24c256
Danarh = Danar
Call Sumowanie
If Danasum > 31920 Then
Adrespam = 0
Adrespamr = 0
End If
Adrespamr = Danasum
Adrespamost = Danasum
Adrespam = Adrespamr + 1 'nastepna komorka, by nie nadpisal
Print "ostatni adrespam odczytany= " ; Adrespamr
 
Loglicz1 = 1
Return
 
'**************************** wykres ********************************************
 
'*******************************************************************************
Wykres:
 
If Loggerenr = 1 And Loggeren = 0 Then
Print "czytam ostatni adres wykresu"
Call Ostadres
'Print "ostatni adres= " ; Adrespam
Adrespam2 = Adrespam
End If
 
If Loggerenr = 1 And Adrespam > 0 And Loggeren = 0 And Iloscwykres < 240 Then 'ilosc odczytow do tylu
Do
'Print "PETLA start " ; "Iloscwykres= " ; Iloscwykres ; " adres Adrespam= " ; Adrespam
Blockprogram = 1 'blokuje zmiane programow
Call Loggerread
 
'Print "Dthr= " ; Dthr
'Print "Dtempbmpr= " ; Dtempbmpr
'Print "Dhhr= " ; Dhhr
'Print "Dcisr= " ; Dcisr
'Print "Ddzienr= " ; Ddzienr
'Print "Dmiesr= " ; Dmiesr
'Print "Dgodzr= " ; Dgodzr
'Print "Dminr= " ; Dminr
Y = Dthr
Print "Y= " ; Y
'Call Ryswykres
Incr Iloscwykres
Loop Until Iloscwykres = 240 Or Adrespam <= 1 'ilosc odczytow do tylu
'Print "PETLA koniec" ; " " ; Adrespam
End If
 
If Adrespam <= 1 Then
Blockprogram = 0
Iloscwykres = 0
Loggerenr = 0
'Print "wychodze z ifa koniec wykrasu "
Wait 1
Cls
End If
 
If Loggerenr = 0 Then
Adrespam = Adrespam2
End If
 
'Print "adrespam koniec wykresu= " ; Adrespam ; " Loggerenr= " ; Loggerenr
 
Return
'****************************minmax ******************************************
 
'************************************************************************************
 
'Dim Xmax As Word
'Dim Xmin As Word
 
'Xmin=1024
'Xmax=0
 
'For C = 1 To 200
 
'a = Getadc(0)
 
'if a 'if a>xmax then xmax=a
 
'Waitms 10
'Next
 
'****************************resowanie wykresu ******************************************
 
'************************************************************************************
Ryswykres:
Locate 8 , 1
Lcd "Wykres temp" ; " "
 
Line(0 , 0) -(0 , 64) , 150 'os liczbowa x
Line(0 , 40) -(240 , 40) , 150 'os liczbowa y
 
Line(0 , 0) -(0 , 2) , 255 'min zakes
Line(0 , 5) -(0 , 2) , 255 'max zakres
 
Line(0 , 5) -(1 , 5) , 255
Line(0 , 10) -(2 , 10) , 255 'podzialka
Line(0 , 15) -(1 , 15) , 255
Line(0 , 20) -(2 , 20) , 255
Line(0 , 25) -(1 , 25) , 255
Line(0 , 35) -(1 , 35) , 255
Line(0 , 40) -(2 , 40) , 255
Line(0 , 45) -(1 , 45) , 255
Line(0 , 50) -(2 , 50) , 255
Line(0 , 55) -(1 , 55) , 255
Line(0 , 60) -(2 , 60) , 255
 
X = Iloscwykres
 
If Y <= 400 And Y >= -400 Then
Y = Y / 10
Y = Y * -1
Y = Y + 40
 
Print "y po dzieleniu= " ; Y
End If
 
Print "y po przeliczniu= " ; Y
 
Pset X , Y , 255
 
Return
 
'**************************** Przerwanie, ********************************************
 
'*************************************************************************************
Sekunda: 'przerwanie
Licznik = Licznik + 1
If Licznik = 60 Then
Licznik = 0
Osw1 = 0
Printen = 0
Printen1 = 0
Loglicz1 = 0
End If
 
Return
 
'obrazki,grafiki w pamieci
Hot:
$bgf "sun.bgf"
Snow:
$bgf "snow.bgf"
Cloudy:
$bgf "cloudy.bgf"
Rain:
$bgf "rain.bgf"
Error:
$bgf "error.bgf"
1:
$bgf "1.bgf"
2:
$bgf "2.bgf"
3:
$bgf "3.bgf"
4:
$bgf "4.bgf"
5:
$bgf "5.bgf"
6:
$bgf "6.bgf"
7:
$bgf "7.bgf"
8:
$bgf "8.bgf"
9:
$bgf "9.bgf"
0:
$bgf "0.bgf"
Kro:
$bgf "kro.bgf"
Krop:
$bgf "krop.bgf"
Hpa:
$bgf "hpa.bgf"
Stopien:
$bgf "c.bgf"
Ujemna:
$bgf "ujemna.bgf"
Dodatnia:
$bgf "dodatnia.bgf"
Procent:
$bgf "procent.bgf"

Portret użytkownika kaktus

:-)

Dobrze że wpadłeś na sprawę oczywistą - trochu tego jest, i opis nawet szczegółowy jak najbardziej wskazany.
Nad okienkiem edycji wypowiedzi masz takie kolorowe ikonki, zapoznaj się z ich funkcjonalnością - na pierwszy ogień bierz taki kwadrat z napisem BAS ;-D

Generowania wykresu trochu trwa jak zauważyłeś bo są tam pewno obliczenia "paskudne". Zawsze możesz pogonić zegar systemowy, nie jest to rozwiązanie ale doraźna uwaga.

I takim optymistycznym akcentem Tobie i całej forumowej braci spokoju ducha, stalowych nerwów, samych udanych projektów, które będą działały za pierwszym odpaleniem - tak jak sobie to konstruktor zażyczył, coraz tańszych i lepiej dostępnych podzespołów, takie drobne życzenia składa kaktus z okazji tegorocznych Świąt Bożego Narodzenia.

-

"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".

Portret użytkownika gosc

wykres

Niestety nie udalo mi sie nic sensownego wymyslic, na razie dziala to na zasadzie wyswietlania wynikow w kolko..
Wyglada to tak:




http://www.fotosik.pl/u/wchpikus/album/1565830

Zlozone na uniwersalnej, wiec prosze sie tym nie przejmowac:)

Portret użytkownika kaktus

;-)

Ładnie, nawet bardzo.

-

"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".