Szerző Téma: Raspberry Pi + mikrovezérlő  (Megtekintve 5207 alkalommal)

hg2ecz

  • Hero Member
  • *****
  • Hozzászólások: 1025
    • Profil megtekintése
Raspberry Pi + mikrovezérlő
« Dátum: augusztus 13, 2013, 04:16:20 am »
Sziasztok!

Sokat gondolkoztam azon, melyik mikrovezérlő "adja magát" a Raspberry Pi-hez.
Az "adja magát" annyit jelent, hogy ne kelljen a kísérletezni vágyó embertársunknak további kódletöltő áramkört venni, netán építeni. Azaz járulékos alkatrészek nélkül a Raspberry Pi legyen a mikrovezérlő össz letöltőhardvere is.

És imént életre kelt a szoftver a mikrovezérlőben, a mikrovezérlőre kötött LED már villog!





A barna vezetékek a +3,3 V és a földvezetékek.
A sárgák pedig a GPIO SPI lábait kötik össze az AVR8 SPI lábaival és a keresztben elszaladó sárga pedig a RESET lábát köti be a GPIO25-re. (A zöld az RS232 teszteléshez, a fehér az i2c teszteléshez van már előkészítve).

Szoftver fordítása:
  sudo apt-get install avr-libc  # magával rántja az AVR GCC-t.

Szoftver letöltése:
  módosított "avrdude" szoftverrel, amelyet innen lehet git-tel lerántani a Raspberry Pi-re:
  https://github.com/kcuzner/avrdude

További fontos: sudo apt-get install automake bison flex   # ezek kellenek a fordításhoz.

Továbbá: /etc/modprobe.d/raspi-blacklist.conf  -ból kivenni (#) az spi-bcm2708 modult. Enélkül nincs /dev/spidev0.0


Használata:

program letöltés:
        avrdude -b 5000 -c linuxspi -pm48 -P /dev/spidev0.0 -U flash:w:$(TARGET).hex:i

fuse beállítás (0xe2: 8 MHz RC órajel, osztás nélkül, 0xe3: RC 128 kHz):
        avrdude -b 5000 -c linuxspi -pm48 -P /dev/spidev0.0 -U lfuse:w:0xe2:m


A -b 5000 azután kellett, hogy 128 kHz-es oszcillátorra tértem át, és a default 400 kHz-es SPI órajellel nem tudta a Raspberryben futó avrdude szoftver felismerni a mikrovezérlőt. Egyébként ha 1-2 MHz-es órajelen jár, akkor elhagyható a -b <baudrate> paraméter.

Jó szórakozást!

--------------------------

Ha valaki egy másik, nem AVR8 mikrovezérlőt vagy egyéb programozható eszközt hasonló módon, azaz külön programletöltő hardver nélkül tud felrakni a Raspberry-re, ne tartsa magában.
« Utoljára szerkesztve: augusztus 13, 2013, 04:25:18 am írta hg2ecz »

ha5di

  • Administrator
  • Hero Member
  • *****
  • Hozzászólások: 1503
    • Profil megtekintése
Re:Raspberry Pi + mikrovezérlő
« Válasz #1 Dátum: augusztus 13, 2013, 08:10:28 am »
Ügyes! Jó lenne egy PIC32/PIC24 verzió :)

hg5apz

  • Sr. Member
  • ****
  • Hozzászólások: 377
    • Profil megtekintése
Re:Raspberry Pi + mikrovezérlő
« Válasz #2 Dátum: augusztus 13, 2013, 08:18:27 am »
Zsolt,
ez egy egyszeru, elegans megkozelites, gratulalok! Azt hasznalod ki, hogy az RPi-n kozvetlenul elerheto egy SPI interface, ami lenyegeben az Atmel avr-ek programozasara is hasznalhato. (Talan erdemes volna egy kis nyakok is tervezni hozza, es azt kozze tenni)
A kontrolerek, (es mas bonyolultabb eszkozok) programozasahoz azonban tobbnyire a JTAG hasznaltos, es ezt bonyolitja, hogy a nagy gyartok megengedhetik magunkak, hogy specialis trukkokel rakjak korul az amugy szabvanyos interfacet, es igy az eszkozeiket csak az altaluk gyartott es extra aron kinalt programozokkal lehessen programozni.
Ennek megkerulesere talaltak ki az openOCD-t, ma mar sokfele eszkoz, programozo hw "tamogatasaval".
Az RPi kozvetlenul kezelheto IO labai azonban kinaljak a lehetoseget, hogy ilyen programozo "valljon belole", itt egy git project, erre kihegyezve:
https://github.com/synthetos/PiOCD/wiki/Using-a-Raspberry-Pi-as-a-JTAG-Dongle
t.janos

p.s.:
 Egy kicsit eltoprengtem az otlet radio amator hasznalhatosagan... valami ilyesmire gondoltam:
az RPi tavolban sdr serverkent dolgozik, a raakasztott avr kontroller pedig a savoknak megfeleloen valtani/kapcsolni tudja a szuroket, antennakat. Ha a szurokhoz tartozik valami algoritmus/program is, akkor jon elo a tavolbol atprogramozhato kontroller elonye.
 
« Utoljára szerkesztve: augusztus 13, 2013, 08:48:42 am írta hg5apz »

hg5apz

  • Sr. Member
  • ****
  • Hozzászólások: 377
    • Profil megtekintése
Re:Raspberry Pi + mikrovezérlő
« Válasz #3 Dátum: augusztus 13, 2013, 08:51:31 am »
Bela,
ez mar majdnem az, amire gondolsz:
http://code.google.com/p/picnc/wiki/OpenOCD_PIC32_Programmer

hg2ecz

  • Hero Member
  • *****
  • Hozzászólások: 1025
    • Profil megtekintése
Re:Raspberry Pi + mikrovezérlő
« Válasz #4 Dátum: augusztus 13, 2013, 09:40:40 am »
http://code.google.com/p/picnc/wiki/OpenOCD_PIC32_Programmer

Már érdemes volt feldobnom a témát. Köszi!
Ez így már szuper, hiszen az RPi táplálhatja az öcsiNYÁK-on ezt a gyors, sok memóriás MIPS procit. Nem kell külön Vpp tápfesz, GPIO-n beletuszkolja a kódot. A szoftvere is megvan RPi-re.
A MIPS magos mikrovezérlőkre továbbra is azt mondom, hogy jó választás rádióamatőr célokra. Végülis más PIC család nem is kell.

Tetszik!



És amiért elkezdtem a témával foglalkozni: jó lehetőséget nyit, hiszen ilyen DIP tokot felrakhat bármelyik rádióamatőr akár egy pöttyös panelre, ahogy éjjel én is felraktam, és például a népszerű Raspbian disztribúción csak egy shellszript lefuttatásával már hozzá is jutott

  - a Raspberry Pi-n futó központi szoftverhez
  - a mikrovezérlőre is letöltődött az ide való kód.

Légből kapott példa:
  - mikrovezérlő A/D-zik, D/A-zik, mér, beavatkozik.
  - Raspberry-ben fut a Soundmodem és webes, AJAX-os, grafikonos csili-vili.

Mindehhez néhány alkatrészt kell rendelni és csak szintén bármely nagyobb elektronikai boltban kapható pöttyös panelen összebarkácsolni.
« Utoljára szerkesztve: augusztus 13, 2013, 09:42:11 am írta hg2ecz »

hg2ecz

  • Hero Member
  • *****
  • Hozzászólások: 1025
    • Profil megtekintése
Re:Raspberry Pi + mikrovezérlő
« Válasz #5 Dátum: augusztus 13, 2013, 09:45:54 am »
... és persze a későbbi szoftver javítások, bővítések is automatikusan érvényre juttathatóak a mikrovezérlőn is.

hg2ecz

  • Hero Member
  • *****
  • Hozzászólások: 1025
    • Profil megtekintése
Re:Raspberry Pi + mikrovezérlő
« Válasz #6 Dátum: augusztus 13, 2013, 12:53:17 pm »
Ha befejeztem az AVR8 mikrovezérlővel a kísérleteimet, meglesz a következő alany is, ami rádióamatőr célokra könnyen felhasználható (pöttyös panel + SPDIP tok).



A pirossal aláhúzott a legnagyobb tagja az SPDIP tokozásúaknak. 128 kB flash, 32 kB RAM, 50 MHz (és MIPS M4K processzorként minden órajel egy újabb 32 bites utasítás). Persze ha csak kisebb elég, akkor a másik 3 is szóba jöhet, akár a mindössze 4 kB RAM-mal rendelkező PIC32MX110F016B is. Árban 500 ... 850 Ft nettó körül szaladnak. Egyébként az ATmega48 hiába 8 bites, nem olcsóbb a fentiek legkisebb tagjánál. Hihehetlenül leestek a mikrovezérlők árai. Gyakorlatilag a benne levő félvezető már alig számít az árba, inkább csak a tokozást fizetjük meg.

ha5di

  • Administrator
  • Hero Member
  • *****
  • Hozzászólások: 1503
    • Profil megtekintése
Re:Raspberry Pi + mikrovezérlő
« Válasz #7 Dátum: augusztus 14, 2013, 11:24:20 am »
Zsolt, várom a PIC32 verziót. Tudom, hogy nem szereted annyira, de ha ez működik, akkor gyakorlatilag megvan a PIc24 és a dsPIC kiadás is.

hg2ecz

  • Hero Member
  • *****
  • Hozzászólások: 1025
    • Profil megtekintése
Re:Raspberry Pi + mikrovezérlő
« Válasz #8 Dátum: augusztus 15, 2013, 12:40:21 am »
Hát, ismét eljutottunk a kérdéshez. Miért érdemes 2013 évben 16 bites mikrovezérlőkkel foglalkozni? A 32 bites ugyanennyit tudó alsó része nem drágább. A jövőt pedig tisztán látszik, hogy mikrovezérlőn a 32 bites architektúrák fogják túlélni, ahol nem fullad végtelen ciklusba egy

   int ct;
   for (ct=0; ct<100000;ct++) { ... }

ciklus.


Így ha egyetlen architektúrával akar az ember foglalkozni, az semmiképpen sem a 16 bites, és végülis egyre kevésbé tudom a 8 bites mikrovezérlők létjogosultságát is alátámasztani. Ugyanazt a számítást lecsökkentett órajellel a 32 bites is elvégzi ugyanannyi energiafelvétellel.

Így én nem erőltetném a 16 bites architektúrákat új projektekre. A régi, meglevő kódot ugyan nem érdemes átírni, inkább beletölti az ember egy 16 bites mikrovezérlőbe, de teljesen új kódot 16 bitesre már szerintem nem érdemes írni. Vagy mondjon valaki előnyt, amiért érdemes 16 bites architektúrával még foglalkozni új projekt esetén?

ha5di

  • Administrator
  • Hero Member
  • *****
  • Hozzászólások: 1503
    • Profil megtekintése
Re:Raspberry Pi + mikrovezérlő
« Válasz #9 Dátum: augusztus 15, 2013, 07:48:36 am »
Én sem erőltetném, de ki tudja, kinek milyen szempontjai vannak. Pl. van 1,000 db PIC24 a fiókban. Egyszerűen csak azt mondtam, hogy a PIC32 megoldás könnyen adaptálható PIC24/dsPIC-re.

ha5di

  • Administrator
  • Hero Member
  • *****
  • Hozzászólások: 1503
    • Profil megtekintése
Re:Raspberry Pi + mikrovezérlő
« Válasz #10 Dátum: augusztus 16, 2013, 10:25:03 am »
Zsolt,

ha már RPi kiegészítő panelről beszélünk, akkor ami nagyon jól jönne az egy audio codec, mivel az RPi-n nincs semmilyen audio bemenet és a kimenet is jó lenne ha megmaradna. A legszebb az lenne, ha hangkártyaként úgy jelenne meg, hogy az FLDIGI, AX25 soundmodem, stb. tudják használni.

hg2ecz

  • Hero Member
  • *****
  • Hozzászólások: 1025
    • Profil megtekintése
Re:Raspberry Pi + mikrovezérlő
« Válasz #11 Dátum: augusztus 17, 2013, 11:24:46 pm »
Eddigi interfészelési eredmények: 8 MHz-es belső RC oszcillátorát használtam az ATmega mikrovezérlőnek.

UART: 38400 stabilan kommunikált a Raspberry-ben futtatott minicom-mal. Ehhez a RPi-n az inittab fájlból ki kell venni a ttyAMA0-t fogó getty sorát.
Sajnos az 57600 bps már nem jött össze.

SPI: ehhez még be kell kötni a CE0 vonalat az AVR 16. (SS) lábára, mert SS nélkül nem ad adatot az AVR.
Továbbá kis segítség Raspberry-re: http://www.100randomtasks.com/simple-spi-on-raspberry-pi
Elkezdtem módosítani az órajelet. 1,95 MHz-ig stabil volt az átvitel. Ez 10 másodpercig tartó mérésem alapján 101 kByte/sec átvitelét teszi lehetővé (Python kód fogadta).

Következő próba: 20 MHz-es kvarcot rakni az ATmega mikrovezérlőre, és így 8 MHz helyett 20 MHz-re emelni az órajelét. Ekkor 250 kByte/másodperc körüli átadható adatsebességet sejtek az AVR SPI buszára.

És még hátra van az I2C busz tesztje. Ott is mérni akarok stabil adatátadásról sebességet.



Bélának: hangkártya céljára lehet USB-re rádughatót kapni. Sajnos a 2500 forintosaknak mono az A/D részük, így I/Q-ra kevesek. A sztereó A/D-sek 9000 Ft körül kezdődnek.
Viszont kapható USB-s sztereo codec IC: http://hu.farnell.com/texas-instruments/pcm2903cdb/codec-audio-16bit-3-3v-usb-28ssop/dp/2214983
« Utoljára szerkesztve: augusztus 17, 2013, 11:33:02 pm írta hg2ecz »

hg2ecz

  • Hero Member
  • *****
  • Hozzászólások: 1025
    • Profil megtekintése
Re:Raspberry Pi + mikrovezérlő
« Válasz #12 Dátum: augusztus 18, 2013, 11:25:39 pm »
Számoltam számolam, de az SPI órajel és az átviteli sebesség még Python késleltetéssel sem stimmelt. Aztán utánanéztem a BCM2835 procinak.

Az RPi-ben az SPI bázis órajel 250 MHz. Ez osztható 2 hatványaival.

250/256 = 0.9766 MHz
250/128 = 1.953 MHz

Na ezért volt, hogy 1,95-ig működött, mert ekkor még nem értem el az 1,953 MHz-et, így lekerekítette 976 kHz-re a kernel driver. Persze erről sehol nem tájékoztatott, de ez van.

Így stimmel már a 101 kbyte (810 kbps) sebesség. A maradékot a python alapú szoftver újabb adatokkal való ellátásának késleltetése vitte a rendszerbe, hiszen a mérés során 2,5 kByte-os vektorokat adtam és vettem szimultán.

Amit még megtudtam, AVR8 adatlapjából:
In SPI Slave mode, the control logic will sample the incoming signal of the SCK pin. To ensure correct sampling of the clock signal, the minimum low and high periods should be:
* Low periods: Longer than 2 CPU clock cycles.
* High periods: Longer than 2 CPU clock cycles.

Így már érthető, hogy az 1,953 MHz miért volt határon a 8 MHz-es órajel esetén. Bár félreérthető a "longer", hogy vajon 3 órajeltől okés a dolog, vagy 2,01 órajeltől?


Ma továbbmentem. Mondom 20 MHz-es kvarc és durr neki. No de ez sem igaz AVR8 esetén, csak ha van 4,5 V feletti tápfesze. A Raspberry viszont 3,3 V IO toleráns. Így marad a 3,3 V.
ATmega48 adatlap szerint 2,7 V-on 10 MHz, 4,5 V-nál 20 MHz-ig stabil. Így 3,3 V-ra 13,3 MHz-ig vállal stabilitást.
Beraktam egy kezembe kerülő 12 MHz-es kvarcot, fuse regisztert átírtam benne 0xe2-ről 0xe7-re és start.

A 8 MHz-es belső órajel helyett 12 MHz-es kvarc alkalmazásával már 200 kByte/sec (1,6 Mbit/sec) adatátadási sebességet értem el az RPi és az ATmega48 között hibátlan átvitellel és Python-ban írt fogadó szoftverrel. Ekkor a RPi-t 2 MHz-re (==> már tudjuk, ez valójában 1,953 MHz) állítottam.
Ezt duplázni 3,3 V-os AVR tápfeszültség mellett vélhetőleg már nem lehetséges. 5 V-ot pedig nem célszerű adni a RPi-re kapcsolt AVR-nek.

Az SPI busz RPi <---> AVR8 esetén ezzel kivesézve.
« Utoljára szerkesztve: augusztus 18, 2013, 11:37:15 pm írta hg2ecz »

hg2ecz

  • Hero Member
  • *****
  • Hozzászólások: 1025
    • Profil megtekintése
Re:Raspberry Pi + mikrovezérlő
« Válasz #13 Dátum: augusztus 18, 2013, 11:51:03 pm »
Mellékhatás: a 12 MHz-es kvarcra áttérve az UART-ot is lehet 115200-on járatni, mivel a 0,16 % pontosan kijön az UART órajele a 12 MHz leosztásával. Ez is működik.
« Utoljára szerkesztve: augusztus 19, 2013, 12:02:08 am írta hg2ecz »

ha5pt

  • Newbie
  • *
  • Hozzászólások: 43
    • Profil megtekintése
Re:Raspberry Pi + mikrovezérlő
« Válasz #14 Dátum: szeptember 17, 2013, 04:20:02 pm »
Egy hasznos alkalmazás Raspberry Pi használók számára a Microchip legújabb chipKIT Pi fejlesztőpanelje. Segítségével PIC32 alkalmazást lehet a Raspberry Pi-vel készíteni. Hamarosan a hazai piacon is elérhető lesz.