Orange Pi zero GPIO

Orange Pi zero GPIO
« kdy: 14. 03. 2017, 10:43:34 »
Ahoj,

i přes přečtená varování jsem si pořídil i Orange Pi Zero. Pomocí RPi úspěšně měřím vzdálenost pomocí ultrazvukového čidla (obdoba HC-SR04, konkrétně US-100 a HY-SRF05), na OPi Zero to ale nemůžu rozběhat. Nainstaloval jsem odsud GPIO:
https://github.com/nvl1109/orangepi_PC_gpio_pyH3

a pak zkusil kód odsud:

https://github.com/balazspekar/ultrasonic-sensor-orange-pi-pc-plus
(zde jsem jen změnil porty pro TRIG a ECHO na PA19/18 (piny 16/18)).

program ale neměří, ctrl-c ho přeruší ve smyčce:

while gpio.input(ECHO) == 1:
pulse_end = time.time()

Máte někdo nějaký nápad, co s tím? GPIO ovladač asi běhá, sample_led.py na LEDky na desce je rozbliká.

díky


dustin

Re:Orange Pi zero GPIO
« Odpověď #1 kdy: 14. 03. 2017, 11:24:36 »
Tipuju si, že se ti to zacyklí v některé z těch smyček, když to nestihne zaznamenat příchozí pulz. Nebo když ten vůbec nepřijde... Nelze tam nějak nakonfigurovat přerušení na příchozí hranu, abys to nemusel hlídat ve smyčce?

Ten kód je na můj vkus moc syrový, nemá tam žádné timeouty, když nic nepřijde, což se stane dost často.

A máš opravdu správně GPIOs?

Přesně pro tyhle real-time aplikace mám raději arduino, které lze časovat spolehlivě, narozdíl od linuxového procesu, jednoho z mnoha.

Re:Orange Pi zero GPIO
« Odpověď #2 kdy: 14. 03. 2017, 11:34:39 »
tak neříkám, že ten kód je geniální, ale funguje v pohodě na RPI2 i RPIB+. To, že by se nemusel impulz stihnout zaznamenat mě napadlo taky, tak jsem nastavil CPU na dvojnásobek minima-z 480MHz na 960MHz - a stejně nic. V tomhle to podle mě nebude.

dustin

Re:Orange Pi zero GPIO
« Odpověď #3 kdy: 14. 03. 2017, 11:41:11 »
Sám píšeš, že to čeká v té čtecí smyčce na příchozí pulz. Tak buď nepřišel, nebo jej to nestihlo zaznamenat, nebo je třeba negovaně. Nepřijít mohl z více důvodů. Prostě to budeš muset nějak zdiagnostikovat.

Já bych na ty dvě GPIOs připojil dva kanály osciloskopu a sledoval, jak se mění zpoždění příchozího po tom odchozím, jak je dlouhý a co to celkově dělá. Ale obávám se, že jím asi nedisponuješ.

Re:Orange Pi zero GPIO
« Odpověď #4 kdy: 14. 03. 2017, 11:51:20 »
no, přesně tak, tímhle nevládnu. Tím negovaně myslíš že místo jedničky přišla nula nebo obráceně? Tohle podle mě nenastává, protože je to stejný senzor, který se stejným programem na Raspíčku běhá.


Re:Orange Pi zero GPIO
« Odpověď #5 kdy: 14. 03. 2017, 11:59:06 »
teď mě napadá, že můžu zkusti poslat TRIG true a držet to a na ECHO tu jedničku detekovat. Když ji chytne, tak pak bude chyba v časování.

Re:Orange Pi zero GPIO
« Odpověď #6 kdy: 14. 03. 2017, 12:11:43 »
tak tohle funguje, při TRIG 1 to ECHO zjistí. Takže zdá se, že to Python/OPiZ nestíhá :-/

Napadá mě, že variantou by i u senzoru US-100 se zapojeným jumperem mohla být varianta "serial data mode", popsaná zde:
https://www.bananarobotics.com/shop/US-100-Ultrasonic-Distance-Sensor-Module

jen to neumím naprogramovat. :-(

Re:Orange Pi zero GPIO
« Odpověď #7 kdy: 14. 03. 2017, 20:59:51 »
Už jsem na to přišel. Senzor US-100, vzadu zapojený jumper pro zapnutí sériové komunikace. TRIG je na pinu 8, ECHO na pinu 10 (UART1 TX/RX).

Kód: [Vybrat]
#!/usr/bin/python
# -*- coding: utf-8 -*-         
     
import time
import serial
         
ser = serial.Serial(                     
                                               
    port='/dev/ttyS1',                       
    baudrate = 9600,                           
    parity=serial.PARITY_NONE,                 
    stopbits=serial.STOPBITS_ONE,             
    bytesize=serial.EIGHTBITS,                 
    timeout=1                                 
)                                             

ser.write("P")
temp = ord(ser.read(1))
print temp-45,"°C"
           
ser.write("U")
data = ser.read(2)

mm=((ord(data[0])*255)+ord(data[1]))
print mm,"mm"

cm=float((ord(data[0])*255)+ord(data[1]))/10
print cm,"cm"

ser.close()     
« Poslední změna: 14. 03. 2017, 21:01:38 od PedroKV »