Fórum témák
» Több friss téma |
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
Sziasztok!
Szeretnék segítséget kérni, melyik debuggert érdemesebb megvenni? Atmel-ICE Atmel-ICE Vagy JTAG-ICE3 JTAG-ICE3 Sajna az AVR-DRAGON-omat elküldtem a másvilágra, teljesen user-error volt, nagyon mérges voltam magamra. A munkámhoz viszont szükségem lenne valami debugger-re. Sima 8 bites Mega AVR-eket használok. Akinek van pozitív vagy negatív infoja a fenti két típusról, kérem ne tartsa magában.
A kód jó, csak át kell írni Mega328-ra.
UNO-ban (amúgy Arduinoban) NEM használható a Mega88. Mega8/168/328 a támogatott 28 lábú IC.
Miket változtassak meg a kódban? A lábakatírjam át? Fejsd ki kérlek bővebben.
Mega8 chip 1 generációval korábbi.
Megszakítások, memóriahivatkozások, timerek eltérőek. Ha valakinek van üres 2-3 órája át tudja bogarászni/tesztelni a kódot. Ennyire nem vagyok penge benne, hogy csuklóból menjen. Nekem egynapi munka/teszt lenne....
Ha az UNO panelról leveszem azokat a lábakat amin keresztül a chipet programozza,akkor felprogramozható róla a Mega88-as is?
NEM. A keretrendszer _nem_ támogatja!
+ bootloader sincs benne.... A hozzászólás módosítva: Aug 29, 2014
Akkor keresek egy másik hasonló projectet. Átírni még nem tudom ahhoz még nem értek.
Sziasztok
Teljesen kezdő vagyok a témában. Vásároltam a linken látható ATmega328 ATmega328 kütyüt. Felraktam az avr studio 6.2 windows 8.1 alá. Amikor ráduktam az atmega-t a driver fel is ment az eszközkezelőben nincs is hiba. Viszont az board-on egy led "L" felírat van felette folyamatosan pirosan villog gondolom valamilyen hibát tükröz. Illetve az avr studio sem éri el. Valaki tudna segíteni mi lehet a baj? Az avr studio hibaüzenete "Could not establish communication with the tool."
Szia!
Most anélkül, hogy mélyebben bele merülnénk a témába javasolnám, hogy töltsd le ezt. Ha úgy gondolod, hogy kezdőként mindenféleképpen a Studio-val kell egy Arduino-val szórakoznod, akkor telepítsd az "Arduino IDE for Atmel Studio 6.1 & 6.2" bővítményt.
Sziasztok! Segítségre lenne szükségem. ATMEGA8-al akarok hőmérőt készíteni, lesz egy Karakteres LCD hozzákötve, és nem találtam a neten csak olyan libraryt, ami karaktereket ír ki float számokat nem.
Elkezdtem csinálni egy algoritmust, de szeretném ha valaki megnézné, hogy helyes-e?
Szia!
EZ a villogás nem hiba üzenet, hanem egy "gyárilag" felprogramozott kód működése (arduinoban a blink example). Ami neked van az egy Arduino Nano klón, javaslom a témájában kérdezősködj. A programozáshoz az Arduino IDE való. A hozzászólás módosítva: Aug 30, 2014
Én nem bonyolítanám ennyire túl.
Egész számokat biztos tud kiírni a library-d. A szám egészrészét az uint8_t egesz=floor(number); sorral megkapod, a tört részét meg úgy, hogy kivonod a számodból az egészrészt, amit kapsz megszorzod 100-al és egész típusra konvertálod.
Sőt, valószínűleg a floor függvény sem kell, ha egy floatot intté konvertálsz, akkor alapból csonkolást csinál, azaz csak az egészrészét hagyja meg a floatnak.
Találtam is egy függvényt
A hozzászólás módosítva: Aug 31, 2014
Szia!
Tavasszal lemértem egy ntc hőmérséklet-ellenállás görbéjét 40-20°C között. A soros ellenállást Fizikus vonalkövetőrobotos írása alapján választottam, a hőmérővel és az adc-n olvasott értékeket excelben lerajzoltam. Nem mértem sűrűn, de egészen egyenes lett a grafikon, így szerintem lineáris az összefüggés. (Az én ntc-m ~4.7kOhm szobahőmérsékleten, -15°c körül kb. 20kOhm, öngyújtó felett pár száz ohm ellenállású. A soros ellenállás 4k7.) Remélem valamennyit tudtam segíteni. Iván
Sziasztok,win környezetben van lehetőség az AVR toolchain használatára a Studio 6 nélkül ?
A CodeBlocks-al próbálkoztam,de az avr csomagban nincs make.A winavr-el gondolom működne,viszont az már 2010-es.
Sziasztok!
Portd regiszternek szeretnék értéket adni, de úgy hogy a pd1, 5 és 6 értéke maradjon annyi, amennyi volt (1, 0), az új érték pedig hexában van és a pd1, 5, 6 bitek helyén 0 van. Hogyan lehetne megoldani?
Először (PD AND b0110 0010) törlöd az állítani kívánt Biteket.
Utána (PD OR bx00x xx0x) beállítod az új értéket.
PORTD = (PORTD & 0b0110 0010) | 0bx00x xx0x;
Így, igaz?
A Commodore 64 alatt 4-5 assembly utasítással ment az egész. Rafkós gyerkeket voltak a Commodore-nál, mert lassú gépen kevés regiszterrel nem lehetett sokat tetvészkedni.
Elsőre borzasztóan néz ki az egész, de azért érthető.
AVR assembly alatt így nézne ki:
A trükk abban áll, hogy két XOR kiüti egymást, viszont ahol AND volt, ott csak egy XOR lesz. - ahol 2 XOR van, ott az új érték lesz - ahol 1 XOR van, ott pedig a port értéke Kíváncsi vagyok, hogy a feltaláló meddig tökölhetett, míg kieszelte ezt a megoldást. Csak viccből írtam, nem kell mindenképpen ezt használni. Commodore-on:
A hozzászólás módosítva: Szept 3, 2014
Ezt a hibát dobja:
../main.c:80: error: expected ')' before ';' token ../main.c:100: error: expected ';' before '}' token Erre: Idézet: „PORTC = ( ( (segments_portc[3] & (_BV(0) | _BV(1) | _BV(2) ) ) ^ PORTC) & ((_BV(0) | _BV(1) | _BV(4) ) ) ^ PORTC; ” A hozzászólás módosítva: Szept 3, 2014
Szia! Mi a suliba codeblocks-al tanultunk console appokat irni, én ehez vagyok szokva, AVR kódot is ebben írok, a szinek miatt, de winavr-el szoktam kompilálni, mert LPT prortos az égetőm, és egy régi laptopot használok amin örülök ha felprogramozza. Emiatt a Codeblocks-al való kompilálást és égetést nem próbéltam, de tudom hogy van ilyesmi a projekt menube. Windows appokat meg Visual C++ ban irok.
Csak viccből írtam, az első AND felesleges.
PORTC = ((segments_portc[3] ^ PORTC) & (_BV(0) | _BV(1) | _BV(4) )) ^ PORTC; AVR alatt teljesen felesleges hasznáni, mert a PORTC = (PORTC & ~(_BV(0) | _BV(1) | _BV(4) ) ) | ( segments_portc[3] & (_BV(0) | _BV(1) | _BV(4) ) ); ugyanazt adja méretben. A zárójeleket számold meg.
Nem akar működni. Csatolom a kapcsolást és a kódot.
Így a kijelzőn a 2. digiten csak a G szegmens világít és nagyon halványan. Később Timerrel fogom megcsinálni a multiplexelést, egyenlőre azt szeretném hogy végtelenciklusban máködjön rendesen.
Igazán nem értem az egész gondolatmenetet?
Mi értelme van a 2 XOR-nak, az 1 OR helyet? Az AVR mindkettőt tudja gépi kód szinten! (Ez nem COMODORE!) Másik mi értelme van ennek a műveletnek: 0b00000000 = 0x00 & 0b01100010; 31.DIGIT_OFF Hol van definiálva? A hozzászólás módosítva: Szept 4, 2014
Azt hittem csak én nem értem miért nem elég ide egy mezei or művelet !?
Idézet: „Mi értelme van a 2 XOR-nak, az 1 OR helyet? Az AVR mindkettőt tudja gépi kód szinten! (Ez nem COMODORE!) ” Commodore (két m), es a 6510 is tudja mindkettot (ORA, EOR). De en is kivancsi vagyok, hogy miert van igy elbonyolitva.
Szia! Javaslom a kalibrációt. Még gyári PLC A/D átalakítójánál is jól jött. 0 fok jeges víz, 100 fok - forrásban lévő víz. Persze van méregdrága hőmérséklet kalibrátor is, de gondolom az nem minden hobbista műhely alapfelszerelése... Én eddig minden mikrokontrollernél és szonda típusnál kalibráltam - az a korrekt megoldás. Ehhez persze nem árt szintén valamilyen segédprogram, ami kiírja a ténylegesen mért értékeket. Az én méréseim szerint elég lineáris a skála. Nálam például egy A/D által mért érték 1/3-ad foknak felelt meg egy PT 100-nál. Nyilván NTC-je válogatja, neked mi lesz a mérés eredménye.
Sziasztok csak egy rövid kérdésem lenne. Megszakításoknál az interrupt flag bit a megszakítás rutin elején, vagy a végén törlődik? Konkrétan INT0 külső megszakításról van szó, de gondolom az összesre érvényes. Köszönöm szépen
|
Bejelentkezés
Hirdetés |