Rasberry PICO PI H on pieni prosessori, joka on vielä edullinen ja sitä on hyvin saatavissa vuonna 2022.
https://fi.farnell.com/productimages/large/en_GB/3643332-40.jpg
Kokeilin sitä MikroMite basicilla, https://geoffg.net/picomite.html
Latasin MiroMite ZIP-käyttöjärjestemäpaketin ja purin sen.
Sitten laitoin PICOn kiinni PC:ni MicroUSB-liittimellä ja otin hiirellä PicoMiteV5.07.04.uf2 ohjelmasta kopion ja laitoin sen uuden levysaseman päälle.
Se hetken latasi käyttöjärjeltemää ja sitten levysasema hävisi.
Laitasin Teraterm ohjelman.
https://en.lo4d.com/windows/ssh-telnet-clients
Laitoin Teraterm ohjelman sarjaliikenne moodiin ja valitsin uuden COM-portin.
Valitsin 9600 baudi nopeuden.
Painoin enter-nappia ja näyttöön tuli ">".
Nyt PICO oli valmiina ohjelmoitavaksi.
Kirjoitin Teratermiin XMODEM Receive ja otin Teraterm ohjelmasta File/Transfer/Xmodem/Send ja sitten tuli PC:lle Teraterm tiedoston hakulomake.
Etsin sieltä NTC.BAS ohjelman ja painoin Enteriä.
Katsoin Edit-komennolla, että ohjelma on valmiina PICOssa.
Painoin F2 ja ohjelma meni pois Edit tilasta ja ajoi itsensä.
Se ei kuitenkaan toiminut sillä PICOn piti laittaa 10k NTC, toinen pää maihin ja toinen ADC0 (PIN31) ja samasta nastata vielä 10k vastus 3.3V.
Nyt toimi, vastaus oli Temp 21.234536C.
' NTC10k, BCofficient =4000, Upper resistance 10kohms, Voltage 3.3V
' RASBERRY PICO PI H
' Measure the temperature
' By Pekka Ritamaki 2022
Option explicit
Dim ADCX As float
Dim Stainhart As float
Dim Res As float
Dim I As float
Const Resistance= 10000
Const Voltage= 3.3
Const BCoeffient= 4000
Const Normal_Temperature= 25
Const ABSOLUTE_TEMPERATURE= 273.15
Dim Stainhartint As INTeger
SetPin 31,Ain ' set ADC0 tp analog
ADCX= Pin(31) ' Read Analog voltage
I=(VOLTAGE-ADCX)/RESISTANCE ' Read NTC current
RES = ADCX/I ' Calculate the resitance
Print "NTC Resistance", RES
Stainhart = RES/10000 ' Start calulate the Stainhart value
Stainhart = Log(stainhart) ' Take a natuaral logatitmus
Print "Log (Stanihart)", Stainhart
Stainhart =Stainhart/BCoeffient ' Divive Stainatt by BCoeffient
Print "Stainhart/4000", Stainhart
Stainhart = Stainhart + 1/(Normal_Temperature +ABSOLUTE_TEMPERATURE)
Print "Stainhart + 1/(25+273)" ,stainhart
stainhart = 1/Stainhart ' Invert Stainhart
Print "1/Stainhart" , stainhart
Stainhart =Stainhart - ABSOLUTE_TEMPERATURE 'Take Celsius temperature
stainhartint = Int(Stainhart) ' Move float to integer
Print "Temp ",Stainhartint,"C" ' Print Temperature in C degrees
==
SSD1306 Grafiikka näyttö
Sitten koekeilin SSD1306 grafiikka LCD näyttöä.
Se on melko pieni 0.9", mutta selvä.
Ennen kuin tein ohjelman, PICO piti antaa mitä I2C väylää se käyttää
OPTION SYSTEM I2C GP0. GP1 ( siis SDA, ja SDL käyttää I2C nollaa)
OPTION LCDPANEL SSD1306I2C, LANDSCAPE (Siis LCD käyttää aikasemmin määriteltyä I2C väylää, ja Landscape tilassa.
Sitten tarvitaan ohjelma
CLS (nollataan vanhat näytön tekstit)
Do (Tee jatkuvasti)
' Text,0,20,Timer$,WhatToDisply$, landscape,font #3
Text 0,20,Time$,L,3 (aloitetaan riviltä 0 ja korkeydelta 20 pikseliä, kirjoitetaan aika hh:mm:ss )
TEMPSUB (käydään lukemassa Stainhart lämpötila)
Text 0,40,Str$(STAINHART),L,3 (Näytetään lämpötila toiselta rivilta, missä on isa tekstiä)
Pause 1000 (1 sekunnin viive)
Loop (( hyppää DO paikkaan)
Sitten kokeilin tavallista 2 rivistä 16 merkin LCD näyttöä.
Tein siihen aliohjelman
Sub LCD1
Bitbang LCD INIT GP2,GP3,GP4,GP5,GP6,GP7 ( näillä komennoilla alustetaan PICO lähettämään LCD dataa) Järjestys on D14,D15,D16,D17, sitten on RS ja En. R/W nasta laitettiin maihin, Samoin kontrastin säätönasta 3, VCC pin2 kytkettiin VSYS nastaan 5V, Maanasta 1 kykettiin maihin)
Bitbang LCD 1,1," Temp" (Sitten mennään 1 riville 1 numerolle ja keirjoiteaan "Temp")
Bitbang LCD 2,1," 22.35C" (Sitten toiselle riville ja kirjoitetaan lämptila)
Print "LCD done"
End Sub
Encoder
Here is 2 pin encoder which can select any number, but normally 0 to 10 or 20
The PICO CODE is here
SetPin GP19, DIN, PULLUP' setup GP19 as an input
SetPin GP18, DIN, PULLUP ' setup GP18 as an input
SetPin GP18, INTH, RInt, PULLUP' setup an interrupt when pin 18 goes high
Do
' < main body of the program >
If value <> 0 Then Print "Value", value
EndIf
Loop
Sub RInt ' Interrupt to decode the encoder output
If Pin(gp19) = 1 Then
Value = Value + 1 ' clockwise rotation
Else
Value = Value - 1 ' anti clockwise rotation
EndIf
Print "value",Value
End Sub
DS18B20 temperature sensor
Then I tested DS18B20 sensor
I works but shows only 15C inside temperature.
Well, I can corrected, but how temperature sensor can give -8 C temperature value?
The I tested PICO inside temperature sensor.
I works better, but shows 2 decrees C higher than normal inside temperature
do DS18B20 ' Print excternal in PIN 16 connected DS18B20 temperature Print Temp() loop End Sub DS18B20 TEMPR START GP16 ' read DS18B20 temperature Print "DS12C20 Temperature ", TEMPR(GP16),"C" pause 1000 End Sub
Serial Uart
Here is my tested Uart programs.
Pico has two serial Uart + editor USB, which is UART also.
'Serial Out once ja IN meny times
' send message only once. Put enter to end
Dim A$
SetPin GP17,GP16,COM1 ' use pins GP17(Tx) and GP16 (Rx)
Open "COM1:9600" As #1
'Do
Input "Type a message: ", A$
Print #1,A$
'Loop
'receive continouly
'Dim A$
'Open "COM1:9600" As #1
Do
Do :Loop Until Loc(#1)<>0 'Wait till something arrives in buffer
Pause 150 'Allow time for data to arrive in buffer
A$=Input$(Loc(#1),#1) 'Suck everything out of buffer, stick it in A$
Print A$
Loop
'
' second program
SetPin GP17,GP16,COM1 ' use pins GP17(Tx) and GP16 (Rx)
Timer =0
DELAY=7000
Open "COM2:9600" As #1
Print Timer,DELAY,Loc(#1)
Do :Loop Until Timer>=DELAY Or Loc(#1)
Print "Hello."
Print Timer,DELAY,Loc(#21)
It has inverters to TX and RX.
It works well in 9600 baud
==
I dis my first Pico project, just for testing
I added normal 16*2 LCD
a Ntc temperature sensor.
DS18B20 temperature sensor.
Encoder switch, with button switch.
A RS232 serial adapter for 9 pin connector.
CD card reader.
A SSD1306 0.9" graphics display card.
A Bluetooth adapter
An external power supply, which can give 3.3V for the PICO
Let see if I add something more.
Here is the PCB
Pekka