Skocz do zawartości

Kurs Raspberry Pi - #13 - PWM, wejścia, skrypty z kamerą


Pomocna odpowiedź

@Kinimod135 niezabardzo wiem co chcesz zdziałać, sam nie mam doświadczenia w takich poleceniach, ale moja propozycja to wejście w Pythona. Na tej stronie masz przykła:

#!/usr/bin/env python2.7  
# demo of "BOTH" bi-directional edge detection  
# script by Alex Eames https://raspi.tv  
# https://raspi.tv/?p=6791  
  
import RPi.GPIO as GPIO  
from time import sleep     # this lets us have a time delay (see line 12)  
  
GPIO.setmode(GPIO.BCM)     # set up BCM GPIO numbering  
GPIO.setup(25, GPIO.IN)    # set GPIO25 as input (button)  
  
# Define a threaded callback function to run in another thread when events are detected  
def my_callback(channel):  
    if GPIO.input(25):     # if port 25 == 1  
        print "Rising edge detected on 25"  
    else:                  # if port 25 != 1  
        print "Falling edge detected on 25"  
  
# when a changing edge is detected on port 25, regardless of whatever   
# else is happening in the program, the function my_callback will be run  
GPIO.add_event_detect(25, GPIO.BOTH, callback=my_callback)  
  
print "Program will finish after 30 seconds or if you press CTRL+C\n"  
print "Make sure you have a button connected, pulled down through 10k resistor"  
print "to GND and wired so that when pressed it connects"  
print "GPIO port 25 (pin 22) to GND (pin 6) through a ~1k resistor\n"  
  
print "Also put a 100 nF capacitor across your switch for hardware debouncing"  
print "This is necessary to see the effect we're looking for"  
raw_input("Press Enter when ready\n>")  
  
try:  
    print "When pressed, you'll see: Rising Edge detected on 25"  
    print "When released, you'll see: Falling Edge detected on 25"  
    sleep(30)         # wait 30 seconds  
    print "Time's up. Finished!"  
  
finally:                   # this block will run no matter how the try block exits  
    GPIO.cleanup()         # clean up after yourself 

Tylko zamiast GPIO.BOTH dasz GPIO.FALLING i powinno działać, a i pullup zamiast .IN

  • 3 miesiące później...
(edytowany)

Cześć,

Dzięki wielkie za kolejny świetny kurs 🙂

Mam pytanie odnośnie podłączania elementów do gpio malinki. Ogólnie przywykłem że wszystko co podłączamy do maliny/arduino puszczamy przez rezystory żeby nie spalić malinki przez zbyt duży pobór prądu. Obecnie chcę podpiąć pamięć SPI flash do malinki przez gpio i jak czytam opisy jak ludzie to robią to widzę że wpinają się bezpośrednio nóżkanu pamięci spi flash bez żadnych rezystorów pod gpio (w zasadzie nie znalazłem żadnego projektu z rezystorami). I tu zapala mi się czerwona lampka no bo to jest wbrew temu co się do tej pory nauczyłem. Inny przypadek (też wylistowany niżej) to użycie rezystora tylko na jednej linii. Czy mógłby mi ktoś wytłumaczyć czemu ludzie nie stosują w tym przypadku rezystorów? Czy to czyste lenistwo i ryzykowanie że nic się nie stanie czy o co chodzi? @Treker masz jakiś pomysł?

Przykład tutaj:

https://www.linuxjournal.com/content/flash-roms-raspberry-pi

Inny projekt używa rezystora tylko na 1 linii:

https://blog.3d-logic.com/2017/12/01/using-raspberry-pi-to-flash-esp8266/

 

Edytowano przez Anno

@Anno wszystko zależy od tego jaki prąd płynie w danej sytuacji. W przypadku SPI mówimy o magistrali, przez którą przesyłane są cyfrowo informacje - płyną tam bardzo małe prądy. To zupełnie normalne, że w takiej sytuacji nie podłącza się tam żadnych rezystorów. Rozumiem, że może to być dla Ciebie mało intuicyjne, ale z czasem szybko zaczniesz wyczuwać różnice w tego typu podłączeniach. Co więcej, przykład z rezystorem, który wkleiłeś to akurat pull-down i nie ma to nic wspólnego z ograniczeniem prądu pobieranego przez układ na danej linii.

  • Lubię! 1
  • Pomogłeś! 1

@Anno raczej ciężko będzie o tego typu artykuł, bo to bardzo ogólny temat. Jeśli natrafisz na podobny przykład np. połączenie przez I2C lub UART to najprościej poszukać jak powinno wyglądać połączenie w przypadku używania tego typu magistrali.  Wtedy będzie wiadomo czy (i jakie) rezystory są ewentualnie potrzebne. 

  • 2 tygodnie później...

Witam, wykonałem ćwiczenie z generowaniem PWM na diodzie po pinie 12. W komentarzu do ćwiczenia jest napisane że tylko piny 12 i 18 są w staniespzrętowo generować PWM - OK. Zatem zacząłem jednocześnie generować PWN na pinie 12(dioda czerwona) i na pinie 18 (dioda zielona), po uprzednim zainicjowaniu pinu 18 w analogiczny sposób jak pin 12. Ku mojemu zdziwieniu komendy wydawane na pin 12 sterowały również pinem 18 i vice versa - wydane na pin 18 sterowały jednocześnie w identyczy sposób pinem 12. Czy to błąd malinki, czy inne uwarunkowania sprzętowe lub programowe?

@ekofarmer pojawienie się RPi4 namieszało całkiem sporo w kwestii GPIO, więc dla formalności zapytam najpierw - na jakim dokładnie RPi wykonujesz to ćwiczenie?

Poczytawszy trochę zorientowałem się, że piny 12 i 18 działają na tym samym kanale PWM (Channel 0) i stąd zaobserwowane ich działanie. Udało się niezależnie sterować PWM dla dwóch diód - należało zainicjować do tego jeden z pinów 13 lub 19, które działają na 2 kanale PWM (Channnel 1). Nie będę zadawał na razie kolejnych pytań, bo z tego co doczytałem, po pojawieniu się RPi w wersji 4, biblioteka WiringPi przestała być utrzymywana i stąd problemy w kursie, który na niej się opiera. Mam nadzieję, że wkrótce uda się Autorom go dostosować. Pozdrawiam

  • Lubię! 1
Dnia 1.08.2019 o 06:24, Treker napisał:

@Tomcat witam na forum 🙂

Jest to znany błąd - aktualne wersje bibliotek nie obsługują jeszcze pull-upa w nowym Raspberry Pi 4. Trzeba poczekać na aktualizację biblioteki, skorzystać z czegoś innego lub dodać rezystor podciągający ręcznie. Więcej informacji oraz przykładowe rozwiązania znajdziesz tutaj: https://forbot.pl/forum/topic/10480-kurs-raspberry-pi-12-podstawy-gpio-skrypty/?do=findComment&comment=133201

 

MATKO BOSKA pół dnia siedziałem nad tym problemem, może z płytką coś albo ten przycisk, kable nie te...

A tu taki psikus z rpi4 

  • Lubię! 1

@grinone64 niestety - tak z tym bywa (wiele projektów z sieci też nie zadziała od razu na RPi4). Dlatego w pierwszej części kursu napisałem na zielono, aby w razie problemów z RPi4 pytać śmiało na forum 😉

@Treker Szkoda, że na stronie kursu przy tym ćwiczeniu nie było wspomniane że to nie dla rpi4.

Kupiłem ten zestaw forbot i czy w dalszej części kursu będą takie sytuacje jak ta. Pytam na przyszłość żebym nie walił głową w mur przy kolejnych projektach. Aparat z przyciskiem da się zrobić?
Nie odbierz mnie źle, nie mam żadnych pretensji- uważam, że zrobiliście mega robotę z tym kursem i nie wszystko zawsze można uaktualnić. 

Życzę Ci przyjemnego wieczoru a ja zabieram się za skrypty w pythonie.  

janusz.thumb.jpg.bb9290cb5b6d031db6b7e76f186976bb.jpg

@grinone64 zgodnie ze stanem mojej wiedzy zmian wymaga jeszcze tylko polecenie do generowanie filmów poklatkowych, ale tam też znajdziesz w komentarzach aktualne podpowiedzi. Jakbyś napotkał jakiś inny problem to od razu pisz, będziemy sprawdzać 🙂

5 minut temu, grinone64 napisał:

Szkoda, że na stronie kursu przy tym ćwiczeniu nie było wspomniane że to nie dla rpi4.

Całkowicie to rozumiem, walczymy z tematem, aby odświeżyć w całości ten kurs. Z różnych względów nie łatamy obecnie kursów punktowo, tylko jak robimy aktualizację to od razu całość - od A do Z. Tak jak miało to miejsce w tych przypadkach:

Dzięki za zrozumienie!

  • Lubię! 2
  • 1 miesiąc później...

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...