Rasberry Pico Pi H

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ö

SSD1306kuva.jpg

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
lcdok.jpg
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

LCDPICO.jpg

Encoder

Here is 2 pin encoder which can select any number, but normally 0 to 10 or 20

Encoder.jpg

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

DS18B20A.jpg

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)

Serial.jpg

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.

Picosch.jpg

Here is the PCB

Pico.jpg

Pekka

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License