Fórum témák

» Több friss téma
Fórum » AVR - Miértek hogyanok
 
Témaindító: pakibec, idő: Márc 11, 2006
Témakörök:
WinAVR / GCC alapszabályok:
1. Ha ISR-ben használsz globális változót, az legyen "volatile"
2. Soha ne érjen véget a main() függvény
3. UART/USART hibák 99,9% a rossz órajel miatt van
4. Kerüld el a -O0 optimalizációs beállítást minden áron
5. Ha nem jó a _delay időzítése, akkor túllépted a 65ms-et, vagy rossz az optimalizációs beállítás
6. Ha a PORTC-n nem működik valami, kapcsold ki a JTAG-et
Bővebben: AVR-libc FAQ
Lapozás: OK   796 / 837
(#) vargham válasza kistee hozzászólására (») Júl 21, 2018 /
 
1. Az Arduino-t hogyan akarod programozónak használni?
2. Az avrdude-t milyen paraméterekkel hívtad meg?
(#) Sick-Bastard válasza kistee hozzászólására (») Júl 21, 2018 /
 
Üdv!

Milyen avrdude parancsot használsz?
Hogy van összekötve az Arduino <-> ATTiny2313?

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

Arduino még nem volt a kezemben, csak a neten fellelt infók alapján a következő a tippem:

A programozás során az Arduinoban található ATMega328(P)-ra vagy rákapcsolódva. A Signature Byte erre utal valóban.
A 328-as ICSP csatlakozója ugye nincs összekötve az Arduino ICSP-jével?
Ha nincs, akkor valószínű, hogy bootloader módban próbálod a 2313-at felprogramozni, ami nem lehet. (Tyúk - Tojás; hogy bootloader módban programozhasd előtte fel kell a bootloadert programoznod rá)
(#) kistee válasza Sick-Bastard hozzászólására (») Júl 21, 2018 /
 
Kösz az eddigi válaszokat. Ezen az oldalon leírtakat követtem, de nekem nem sikerült.

Az Arduino-t használtam ISP-ként, a 328-asra már sikerült programot feltöltenem, igaz, az Arduino keretrendszerből.

avdude_2.png
    
(#) Sick-Bastard válasza kistee hozzászólására (») Júl 21, 2018 /
 
A neten a következőt találtam:

1. Az Arduinoban található Mega328P-t programozd fel az ArduinoISP "sketch"-el
2. Arduino - Attiny összekötése

Arduino - Attiny
pin10 - RST
pin11 - MOSI
pin12 - MISO
pin13 - SCK
+ táplálás

3. az avrdude parancs kiadása
  1. avrdude -P com6 -b 19200 -c avrisp -p attiny2313 -U flash:w:main.hex


A COM Port és a flash megfelelően legyen kiválasztva.
(#) kistee válasza Sick-Bastard hozzászólására (») Júl 22, 2018 /
 
Köszi, megpróbálom.
(#) kistee válasza kistee hozzászólására (») Júl 23, 2018 /
 
Sajna még mindig nincs sikerélmény, de még kutakodom a neten, találtam is valamit, de még nem tudom kipróbálni. Majd otthon...

Azt írják az egyik oldalon, hogy tegyünk be 10µF kondit az Arduino Reset és GND közé. Mindenesetre rendeltem egy "rendes" AVR-ISP programozót is, annak mennie kell...

Kösz az eddigi segítséget mindenkinek!
(#) fifadani hozzászólása Júl 26, 2018 /
 
Sziasztok!

Szeretnék ötletet kérni Tőletek.
UART-on történő kommunikációhoz. Pontosabban RS-485.
6 byte-os csomagokkal operálok, azonban meghatározhatatlan időnként "befagy" a rendszer.
A beszélgetés lépései: M küldi S1 cím a buszra, S1 vissza küld 6 byte-ot. M ezeket eltárolja. M küldi S2 cím a buszra, S2 visszaküld 6 byte-ot. M ezeket eltárolja. Ha mindkét csomag kész, PC-re továbbítja őket.
Nem ISR-el fogadom a byte-okat, hanem polling-olok. A gondom az, hogy a while-ban beragad valamelyik eszköz.
A rendszer íróasztalon van, SN75176 IC-vel. M=m128, S1 és 2=m8. Baud 9600. Lezárók 120ohm-ok a busz elején, végén.
Szoftverben keressem inkább a hibát? Pl.: lehetne ISR-el fogadni a masterben és a slave-ekben?
Vagy villamosságtani gond lehet?

Hogyan lehet védekezni az ilyesfajta hibák ellen?

Köszönöm szépen!
(#) Kovidivi válasza fifadani hozzászólására (») Júl 26, 2018 /
 
Szerintem: minden hardware-esen elképzelhető hibát kezelni kell a szoftverben. Ha a program nincs felkészülve valamire, akkor az a program még nincs kész! Biztosan van egy feltételed, ami vár valamire, ami hiba esetén nem következik be. Ilyenkor kell egy timeout, amit megfelelően méretezve, azonnal kibukik a hiba. Ezután lehet újra próbálkozni, vagy szólni az user-nek, hogy a hardware hibás, javításra szorul. Ki kell debuggolni, hogy mi okozza a hibát!
Fel kell készülni vezeték szakadásra, arra is, ha lekapcsolod a páraelszívót, ami ilyenkor óriási zavart okoz, ha elmegy az áram, ha villám csap be a közelbe, ha kóla löttyen valahova
A hozzászólás módosítva: Júl 26, 2018
(#) Sick-Bastard válasza fifadani hozzászólására (») Júl 27, 2018 /
 
Ahogy Kovidivi is mondja, minden lehetőségre fel kell készülni.

A polling-nak pont ez a veszélye, ha van egy időigényesebb ciklus, akkor le is maradhatsz 1-1 bitről/byteról és az UART már nincs is szinkronban.
Szerintem ISR-ben kéne, legalább a fogadást (RXD) végezni. Így valószínűbb, hogy nem maradnak le byte-ok.

pl.:
Ha M küldi S1 cim-et a buszra, induljon el egy idő számláló (6byte küldése 9600-baudon ~5ms időbe telik jól számolom?) legyen pl 10ms, ha ezen belül nem jön válasz, akkor küldje újra
legyen egy byte számláló is, ha kevesebb mint 6 byte jött be, akkor a csomag érvénytelen
(közben rájöttem, hogy csak van benne, mert ha nem lenne, akkor folyamatosan összeakadna és nem csak néha)

Ami még fontos, hogy milyen a csomag felépítése?
Ha Sx küld egy csomagot, akkor értelmezheti e Sy-azt egy M-től érkezett üzenetként?
(#) kiszebra hozzászólása Júl 27, 2018 /
 
Egy gyors kérdésem lenne: A TQFP tokozású AtMega32-nek miért van három pár GND-VCC kivezetése? Mindet be kell kötni, vagy esetleg ugyanazt a kivezetést jelentik és segítenének a tápfesz továbbításában? Köszi!
(#) vargham válasza kiszebra hozzászólására (») Júl 27, 2018 / 1
 
Mindet be kell kötni, és mindegyikre kell a 100 nF kondenzátor. (Egy nagyobb tokon akár 10-14 pár táp is lehet, és azokat is mind be kell kötni.)
Amúgy a datasheet is írja.
(#) kiszebra válasza vargham hozzászólására (») Júl 27, 2018 /
 
Köszönöm!
(#) csatti2 válasza kiszebra hozzászólására (») Júl 27, 2018 / 1
 
A GND és AVCC párt is be kell kötni, amit nem karikáztál be.
(#) vargham válasza csatti2 hozzászólására (») Júl 27, 2018 / 1
 
Jó meglátás, nekem fel sem tűnt. Valóban, az analóg tápot is be kell kötni, különben nem fog működni az egész MCU. Adatlapban benne van, hogy melyik részegység honnan kap tápot.
(#) TavIR-AVR válasza vargham hozzászólására (») Júl 28, 2018 / 1
 
Tipp: Aref és a GND közé 10 100nF kondit tegyél. Hamár tápot tervezel. Az az analog referencia (belső) tápja!
(#) kiszebra válasza vargham hozzászólására (») Júl 28, 2018 /
 
Azt meg is találtam az adatlapban, hogy az analógot be kell, csak a többit nem. Köszi a válaszokat!
(#) fifadani válasza Sick-Bastard hozzászólására (») Júl 28, 2018 /
 
Igen, azzal is van problémám, hogy az adatot címnek tekintik a buszon résztvevők.
Hogy lehet ez ellen védekezni?
(Pl.: mondjuk előre eldöntöm, hogy az adatok értéke 0-250-ig terjednek, mondjuk a címek ez felett 255-ig...?
De szerintem ez így nem jó megoldás.)
(#) Sick-Bastard válasza fifadani hozzászólására (») Júl 29, 2018 /
 
(már késő van lehet picit kusza lesz a gondolatom)
Tipp:
Legyen fix a csomag félépítése.
Byte-ról bytera:
1. byte - egy fix byte pl.: 0xAA
Ha lehetséges (az rs 485-öt nem használtam még), a küldő fél miközben küldi az első byte-ot, figyelje is a bejövő jelet. Ha a "visszhang" nem = a fix byte-al (0xAA), akkor valaki más is van a vonalon....
Sőt talán az összes adatot érdemes így visszaolvasni. Miközben M/S adatot küld figyeljen is. Ha nem egyeznek meg, akkor rossz volt az átvitel -> ergo ismételni kell, némi késleltetés után. A késleltetés chipenként eltérő legyen .
... és még talán... lentebb folyt...

2. byte - cél cím, kinek is küldöm az adatot

a következő byte lehetne a forrás cím, de esetedben nem kell így ezt most hagyjuk is....
ill. ha utasítás is van (ír/olvas) ez is mehet a 2. byte-ba 1 bit feláldozásával (mint az I2C-nél)

további byteok (3.-6.) maguk az adatok.

Kell még egy byte számláló is, hogy tudjuk hol is tartunk. Az előző hozzászólásomban említett időzítő most hasznos lesz.
ITT JÖN a folyt...
Ha a hallgató/fülelő uC-be bejön az első byte, ami nem 0xAA, akkor már tudjuk is hogy az csak zaj a buszon.
Közérdekű: Jól gondolom, hogy valószínűleg 0x00-át kapnánk "zaj" byte-nak? A gondolat menetem itt most inkább kihagyom...
Ekkor a byte számlálót nem növeljük, az stopper nem indul.

Ha bejött az első byte, ami 0xAA, akkor indul a stopper és a byte számlálás is.
Ha nem jön meg a következő byte a szükséges időn belül, ami ~2.08ms, akkor a csomag érvénytelen. Kezdjük elölről a figyelést.
Ha nem jön meg mind a 6 byte, akkor szintén érvénytelen a csomag.
...
Itt abbahagyom. Már totál ki vagyok merülve....
(#) Kovidivi válasza Sick-Bastard hozzászólására (») Júl 29, 2018 /
 
Ellenörző összeget lehet készíteni, nem kell fix első byte adatnak (idő és hely pazarlás). A csomagban lehet a küldendő byteok száma is, ekkor lehet változó hosszúságú is az adat (felhasználás függő). Ha nem jó az ellenörző összeg, akkor eldobjuk az egész csomagot.
(#) RoliNyh válasza fifadani hozzászólására (») Júl 29, 2018 /
 
Én erre olyan megoldást láttam, hogy speciális karakterrel azonosítják az adatot és a címet.

Tegyük fel, egy $ karakter, és utánna X darab szám
(lehet decimális vagy akár hexa vagy ami tetszik), ami a címet azonosítja.

Aztán pl egy # karakter, és utánna a megfelelő adat, szintén lehet decimális hexa akár szöveg tehát karakter is, vagy ahogy tetszik. Szóval a vevők a dollár jelből tudják, hogy cím következik, és a kocka jelből pedig, hogy adat következik. Amelyík vevő felismeri, hogy az üzenet neki szól, az veszi az adatokat.

Pl.: $00#27A4BB (HEX)
Pl.: $01#10110001 (BIN)
Pl.: $02#Ez egy adat (SZÖVEG)
Pl.: $A5#598 (DEC)

Ha szükséges az adat után tehetünk "adat vége" karaktert, ami mondjuk egy újabb speciális karakter
(jelen esetben a kukac)

pl.: $00#27A4BB@

Vagy akár keretbe is foglalható, miszerint az adatot két kocka közé tesszük

pl.: $00#27A4BB#

Az utóbbi két lehetőséggel az is eldönthető, hogy rendben átjött -e minden adat.
Aztán, hogy a helyességét ismétléssel, vagy paritánssal ellenőrzöd, vagy sehogy, egyéni döntés.

Igazából ez még csak az elmélet amit majd én is használni akarok...
A hozzászólás módosítva: Júl 29, 2018
(#) fifadani válasza RoliNyh hozzászólására (») Júl 29, 2018 /
 
Szia!

Hm... Nem is rossz elgondolás. Szóval;
M küldi $ 0x01
S1 felismeri, visszaküldi mondjuk a saját címét, hogy fent van a buszon
M küldi $ 0x01 megint, erre slave vissza nyomja az adatokat lezárva #-el
M küldi $ 0x02
S2 felismeri stbstb.

Igazából a slave-eknél a fogadás simán mehet ISR-el, hisz csak a megszólításra várunk.
Viszont a masterrel, hogy csinálom meg a megszakításos fogadást?
Hogy tudnék feltölteni monduk egy temp tömböt az adatokkal, hogy "zavarás" ne érje. Persze a kész temp-et megvizsgálni és átadni az értékeket az S1 S2 tömböknek.

Köszönöm a gondolatot, próbálkozom.
(#) RoliNyh válasza fifadani hozzászólására (») Júl 29, 2018 /
 
Én leginkább csak az adat és cím szeparációra próbáltam ötletet adni.

De ha arról van szó, hogy a slave felől küldenél valamit megszakítással a masternek,
szerintem akkor a megszakításrutinba kéne egy olyat írni, hogy a master behallgat a vonalba.
Az a slave pedig aki kiváltotta a megszakítást, az előző elv alapján elküldi a "nevét" és az adatot.

Pontosabban, amíg nincs reagálás a master felől, addig a slave csak a nevét küldi bizonyos időközönként, csökkentve ezzel az adatforgalmat. Ha a master azonosította ki akar beszélni,
ezt visszanyugtázza az aktuális küldőnek, és ez után a slave küldheti az adatokat is.
(#) Szasza9668 hozzászólása Júl 30, 2018 /
 
Sziasztok!

Szeretnék egyszerre három pwm jelet kreálni. Az áldozat egy mega32. A pwm kimenetek működhetnek egyszerre? Nem foglalja le nagyon az mcu-t?

Üdv!
(#) Kovidivi válasza Szasza9668 hozzászólására (») Júl 30, 2018 /
 
Ha hardveres PWM-et használsz, elmehet a uC aludni is!
(#) kistee válasza kistee hozzászólására (») Aug 1, 2018 /
 
Végül ma összejött a mutatvány: egy Arduinót ISP-ként használva sikerült feltölteni egy hex fájlt a Tiny2313-ba.

Hogy más is okulhasson belőle, leírom, hogy mi volt a megfejtés: az ArduinoISP sketch-ben a baud-ot át kell írni 9600-ra és így letölteni. Az avrdude parancssorában is meg kell adni ezt a sebességet ( -b 9600). Ennyi.
(#) panther76 hozzászólása Aug 10, 2018 /
 
Sziasztok!

Segítséget szeretnék kérni, mert már teljesen eltévedtem az AVR programozás útvesztőiben.
ATtiny13-at szerettem volna programozni Flowcode-ban (sajnos a C nem megy, az AVR assemblyvel még csak most ismerkedem), de nem sikerült a PWM létrehozása, pedig az adatlap szerint van két csatorna is erre a célra. A feladat nagyon egyszerű, mindössze arra lenne szükség, hogy bekapcsolás után, kb. 20-40 sec. ideig a 6. lábon egy fix (de állítható!) kitöltéssel PWM-et hozzunk létre. Majd, az időzítés lejárta után, egy másik PWM jelet generáljunk az 5. lábon és az előzőt kikapcsoljuk.
Minden lehetőség érdekel (kivéve, hogy használjak más típust)!
Köszönöm!
(#) vargham válasza panther76 hozzászólására (») Aug 11, 2018 /
 
Megosztod a programod forrását? Vaktában nehéz segíteni.

Ránéztem erre a Flowcode-ra. Szerintem C-ben könnyebb lenne...
(#) Unfi hozzászólása Aug 11, 2018 /
 
Sziasztok.
Van egy MKII klónom, saját építésű. Próbáltam több firmware-t is beletölteni, de az Avr studio 4.19 nem ismeri fel. Tud valaki olyan firmware-t ami jó lenne. Atmel studio felismeri, és éget is vele.
Köszönöm:
(#) panther76 válasza vargham hozzászólására (») Aug 11, 2018 /
 
Természetesen megosztom, de csak a PWM létrehozásának van meg a folyamatábrája kipróbálás céljából, nem a teljes feladatnak. Már itt falakba ütköztem, mert van a Flowcode-ban PWM makró, viszont az ATtiny13 típus kiválasztása után, a makró tesztablakában az "unavailable" üzenet látható. Ha az ATtiny45 van kiválasztva, akkor a "disabled" üzenet jelenik meg. Ezért a szükséges paramétereket a makróhoz már nem is tudom beállítani. Lehet, hogy bizonyos típusokhoz nem elérhető néhány funkció, mert a Flowcode-om nincs regisztrálva, csak próba verzió?

BLF.JPG
    
(#) vargham válasza panther76 hozzászólására (») Aug 11, 2018 /
 
Ez az egész max 10 sor C-ben. Van hozzá támogatás, példák, és a teljes, professzionális fejlesztőeszköz ingyen van.
Biztos, hogy akarod ezt a Flowcode dolgot?
Következő: »»   796 / 837
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem