Založen: Jul 27, 2004 Příspěvky: 4635 Bydliště: 25km na západ od Prahy
Zaslal: čt únor 09 2023, 11:43 Předmět: Částečně fungující Raspberry Pi Pico *vyřešeno*
Mám Raspberry Pi Pico a k němu program pojmenovaný main.py. Ten jsem nahrál tak, jak se všude píše. Stiskl jsem tlačítko, Pi se připojilo jako další disk a do něj jsem nakopíroval program.
Ledka blikne každých 10 sekund, kdy se posílá signál pro krokový motor, který se správně pootočí. Jenže další část programu nefunguje. GPIO 20 a 21 by mělo být podle programu HIGH, ale je na zemi a tlačítka nefungují.
Mohla by mě nějaká dobrá duše poradit, jak to rozběhat celé?
citace:
# micropython program for the hollow-clock4
# https://www.thingiverse.com/thing:5636482
# for the rasperry pi pico
# V1.1 01.05.2023
# modified software based on pico sw from hollow clock2 author macke01
# (https://www.thingiverse.com/thing:4840471)
# timing modified for Hollow Clock 4
# simplified time setting by addition of slow/fast forward and backward time set buttons
# simplified code, time base adjustment found unecessary with pi pico cpu clock
# reordered I/O assignment
# To syncronize hands - set hour and minute hands to 12 oclock by adjusting the minute & hour gears
# then place into base and adjust to correct time with time setting buttons
# If clock runs backwards, jumper Pi Pico pins 32 - 33 (GPIO27 - GND)
class global_values:
# Constants
STEPS_PER_15MINUTES = 7680 # steps of a single revolution of motor gains 15 min.
STEPS_PER_MINUTE = int(STEPS_PER_15MINUTES/15)
STEPS_PER_5MINUTES = int(STEPS_PER_15MINUTES/3)
STEPS_PER_HOUR = STEPS_PER_15MINUTES * 4
# define and init variables
self.last_move_msec = utime.ticks_ms()
self.delaytime = 20 # wait between phases of stepper = smoothness
self.direction = 0 # direction of movement
self.prev_sec_msec = utime.ticks_ms()
def steps_per_move(self, steps):
# sets values depending on the steps per move
n = int(steps)
self.STEPS_PER_MOVE = n
self.MOVES_PER_HOUR = self.STEPS_PER_15MINUTES * 4 / self.STEPS_PER_MOVE
self.PAUSE_BEWEEN_MOVES_MSEC = 60000*60 / self.MOVES_PER_HOUR
G=global_values()
# pins assignment
pin1 = Pin(6,Pin.OUT) # Pico GPIO6 (Pin 9) connected to stepper control Pin In1
pin2 = Pin(7,Pin.OUT) # Pico GPIO7 (Pin 10) connected to stepper control Pin In2
pin3 = Pin(8,Pin.OUT) # Pico GPIO8 (Pin 11) connected to stepper control Pin In3
pin4 = Pin(9,Pin.OUT) # Pico GPIO9 (Pin 12) connected to stepper control Pin In4
# pins cause action when pulled down
pin_ffwd = Pin(20,Pin.IN, Pin.PULL_UP) # time set button fast forward GPIO20 (Pin 26)
pin_fbwd = Pin(21,Pin.IN, Pin.PULL_UP) # time set button fast backward GPIO21 (Pin 27)
pin_toggle_dir = Pin(27,Pin.IN, Pin.PULL_UP) # change clock run direction GPIO27 (Pin 32)
# phase and direction definition
pins_fwd = [pin1,pin2,pin3,pin4]
pins_bwd = [pin4,pin3,pin2,pin1]
pins_dir = [pins_fwd,pins_bwd]
pins = pins_dir[G.direction] #pins = [pin4,pin3,pin2,pin1] for forward movement
for j in range(steps):
phase = (phase + 1) % 8
for i in range(4):
pins[i].value(seq[phase][i])
pin25.value(seq[phase][i]) # Pico Led flashing.
utime.sleep_ms(G.delaytime)
# power cut
for i in range (4):
pins[i].value(0)
pin25.value(0) # Pico led off
# reverse stepper direction if needed - jumper pins 32 -33 on pico
if pin_toggle_dir.value() == 1:
toggle_dir()
while True:
# time set routine
fwd_flag = True # by default forward direction
t_button = utime.ticks_ms() # capture initial time to determine setting button press duration
while (pin_ffwd.value() ^ pin_fbwd.value()): # if only one button pushed
if (utime.ticks_ms() - t_button) < 500: # button press less than 500 ms
G.delaytime = 5 # then semi fast rotation
else:
G.delaytime = 1 # very fast rotation
# by default move forward continously as long as a setting button is pushed
# otherwise check fast backward button
if pin_fbwd.value() == 0: # move backward continously as long as pin is pulled down
if fwd_flag:
toggle_dir() # reverse direction
fwd_flag = False # flag reverse direction
move(20)
if not (fwd_flag): # if previous command reverse direction
toggle_dir() # then restore
G.delaytime = 20 # resume
#main clock timing code
msec = utime.ticks_ms()
timediff = utime.ticks_diff(msec, G.last_move_msec)
# utime.ticks_diff cares about wrapping of msec values internally
# so we must not care about value wrapping
if timediff > G.PAUSE_BEWEEN_MOVES_MSEC:
# time since last move has passed
move(G.STEPS_PER_MOVE)
# set pause until next move
G.last_move_msec = utime.ticks_add(G.last_move_msec, int(G.PAUSE_BEWEEN_MOVES_MSEC))
_________________ Kdyby Edison nevynalezl elektřinu, do teď se díváme na televizi při svíčkách.
Naposledy upravil hafca dne ne únor 12 2023, 19:47, celkově upraveno 1 krát.
Založen: Jul 27, 2004 Příspěvky: 4635 Bydliště: 25km na západ od Prahy
Zaslal: čt únor 09 2023, 14:19 Předmět:
Zkoušel jsem to dotykem kablíku proti zem přímo na modulu. Tam asi chyba nebude. _________________ Kdyby Edison nevynalezl elektřinu, do teď se díváme na televizi při svíčkách.
Založen: Jul 27, 2004 Příspěvky: 4635 Bydliště: 25km na západ od Prahy
Zaslal: čt únor 09 2023, 15:50 Předmět:
Obojí. Měřil jsem napětí na všech pinech a žádný z GPIO není na HIGH. Mimo těch čtyřech co mají na starosti motor. Tam se to střídá jak má. Zkusil jsem přidat další piny k těm co nejdou, ale nic. Pořád jen LOW. _________________ Kdyby Edison nevynalezl elektřinu, do teď se díváme na televizi při svíčkách.
$ picotool info -a build-PICO/firmware.uf2
File build-PICO/firmware.uf2:
Program Information
name: MicroPython
version: v1.18-412-g965747bd9 <<<-------------- TOTO TU !!!!!!!!
features: USB REPL
thread support
frozen modules: _boot, rp2, _boot_fat, ds18x20, onewire, dht, uasyncio,
uasyncio/core, uasyncio/event, uasyncio/funcs, uasyncio/lock,
uasyncio/stream, neopixel
binary start: 0x10000000
binary end: 0x1004ba24
embedded drive: 0x100a0000-0x10200000 (1408K): MicroPython
Fixed Pin Information
none
Build Information
sdk version: 1.3.0
pico_board: pico
boot2_name: boot2_w25q080
build date: May 4 2022
build attributes: MinSizeRel
Takže verzia bootloaderu 2.0 je asi niečo iné.
Ja také módne výstrelky, ako je python, nemám rád. Takže viac sa v tých verziách nemienim vrtať. Akú verziu pythonu používaš a ako sa v nej nastavuje pull up si budeš musieť zistiť sám.
Keby si programoval v Céčku, už by si to mal hotové.
Založen: Jul 27, 2004 Příspěvky: 4635 Bydliště: 25km na západ od Prahy
Zaslal: čt únor 09 2023, 18:27 Předmět:
Zkoušel jsem tam rp2-pico-20220618-v1.19.1.uf2 i straší verzi rp2-pico-20210202-v1.14.uf2, ale je to stejné.
Céčko se už asi nenaučím, jsem rád, že dokážu pár věcí v Arduinu. _________________ Kdyby Edison nevynalezl elektřinu, do teď se díváme na televizi při svíčkách.
Založen: Jul 27, 2004 Příspěvky: 4635 Bydliště: 25km na západ od Prahy
Zaslal: ne únor 12 2023, 19:46 Předmět:
Nakonec byla jako vždy chyba mezi židlí a klávesnicí. Ale jen napůl.
Všude se psalo připjit se stisknutým tlačítkem a nahrát main.py. Jenže NIKDE nebylo napsáno, že se to musí nahrát přes Thonny. Jinak se ten program se do PI neuloží. _________________ Kdyby Edison nevynalezl elektřinu, do teď se díváme na televizi při svíčkách.
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.