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   815 / 821
(#) tufatofu hozzászólása Jún 23, 2020 / 1
 
Köszi az ötleteket mindenkinek, nekem ezzel tűnik menni, persze kellett fusebitdoctorozni néhányszor mert elcsesztem a próbálgatással low :0xff
high:0xde
ext :0x05
A hozzászólás módosítva: Jún 23, 2020
(#) Tambi hozzászólása Jún 25, 2020 /
 
Kedves Fórumtársak!
Van-e olyan AVR, amibe beépítettek (mondjuk) egy 8 bites R-2R DAC hálózatot, és így van 8 bites analóg kimenete? A hangsúly az ANALÓG KIMENET -en van... (nem PWM)

Köszönöm szépen!
(#) vargham válasza Tambi hozzászólására (») Jún 25, 2020 /
 
(#) Tambi válasza vargham hozzászólására (») Jún 26, 2020 /
 
Köszönöm, kedves Vargham, sokkal több van, mint gondoltam.
(#) vargham válasza Tambi hozzászólására (») Jún 26, 2020 /
 
Igen, és ezek mind új termékek, már a Microchip korszakban jelentek meg.
(#) rolandgw válasza Tambi hozzászólására (») Jún 26, 2020 / 1
 
Azért gondold meg mielőtt belevágsz. Ezek nem hagyományos AVR-ek, Xmega féle architektúra. Periféria könyvtárakat alig fogsz találni, amit az Atmel Start összeüt, az hibakeresés gyakorlásra kiváló. Új programozó, például Mplab Snap. Nem részletezem, vicc kategória mire használni tudod Atmel Studio-ban. MC nevéhez méltó errata-k. Könnyebb és olcsóbb megtanulni egy Cortex M0+ MCU-t, mint lehetséges alternatíva.
(#) vargham válasza rolandgw hozzászólására (») Jún 26, 2020 /
 
Egyetértek. A munkahelyemen AVRről váltottunk STM32re. Nagyságrendekkel könnyebb a fejlesztés, hibakeresés. Azóta a hobbiprojektekhez is inkább azt használom.
(#) Zsombi13 hozzászólása Jún 28, 2020 /
 
Sziasztok!

Találtam egy kapcsolási rajzot, és szeretném megépíteni. Az egyetlen problémám, hogy sehol sem találom a rajzon "TD62034" nevű alkatrészt. Az alkatrészlistán azonban ugyanez az alkatrész "TD62304" néven szerepel. Kérdésem az lenne, hogy a két név közül melyik lesz az, ami a tényleges alkatrész jelöli, illetve mivel tudnám helyettesíteni, mert sehol nem találok ilyen néven alkatrészt. Ez egy darlington tranzisztor mező, hátha ez segít valahogyan.

Előre is köszönöm a segítséget!
(#) csatti2 válasza Zsombi13 hozzászólására (») Jún 28, 2020 /
 
Az IC2 és IC3 jól láthatóan feliratozva lett TD62034 néven.
(#) Zsombi13 válasza csatti2 hozzászólására (») Jún 29, 2020 /
 
Igen, azt én is látom, és írtam is, hogy a rajzon az van, viszont az alkatrészlistában más alkatrész szerepel, és az interneten nem nagyon találok adatlapot TD62034-hez. Ugyanakkor TD62304-hez igen, és ezek szerint a rajzon téves a feliratozás. Ez lehetséges, mert bárki hibázhat. Van-e erre valami helyettesítő alkatrész, vagy a belső kapcsolási rajz alapján építsem meg az alkatrészt? Ebben az esetben a tranzisztorok milyenek legyenek, mert konkrét értékek nincsenek feltüntetve, csak az, hogy az egyik pnp, a másik kettő npn típusú.
A hozzászólás módosítva: Jún 29, 2020
(#) lazsi válasza Zsombi13 hozzászólására (») Jún 29, 2020 /
 
A rajz alapján azt tippelném, hogy 7 db. npn tranzisztor van benne, nem pedig 1 pnp és 2 npn. Így esélyes, hogy te nem a megfelelő tok leírását találtad meg...

Idézet:
„Az egyetlen problémám, hogy sehol sem találom a rajzon "TD62034" nevű alkatrészt.”

Ami alapján jogosan feltételezhető, hogy nem találtad a rajzon...
A hozzászólás módosítva: Jún 29, 2020
(#) Zsombi13 válasza lazsi hozzászólására (») Jún 29, 2020 /
 
Igazatok van, de itt a gyatra fogalmazáson alapult a félreértés, úgy értettem, hogy a "rajzon szereplő alkatrészt a rajzon megtaláltam, de adatlapot nem találtam hozzá".

Ami adatlapot linkeltem, abból származik az alábbbi kép, ebből kiindulva gondoltam, hogy 1 pnp és 2 npn tranzisztor van benne. Ugyanakkor örömmel megfogadom a nálam tapasztaltabbak tanácsát, hiszen pont ezért is írtam a fórumba
(#) rascal válasza Zsombi13 hozzászólására (») Jún 29, 2020 /
 
Az általad mellékelt képen is "034" szerepel, valószínűleg jól elírták és lehet, hogy a kapcsolási rajzot készítő ember is ezt az adatlapot nézte. A jobb alsó sarokban szereplő dátum más mint azon az adatlapon, amit én vadásztam le az alldatasheet-ről, és azon pedig ugyan ennél az ábránál "304" szerepel.
(#) lazsi válasza Zsombi13 hozzászólására (») Jún 29, 2020 /
 
Én azt gondolom továbbra is, hogy nem erre az alkatrészre van szükséged...
Az IC3-nál a nem használ egységek bemenetei földre vannak kötve, míg a kimenetei tápfeszültségre.
A most belinkel rajz (neten keresve én is megtaláltam) szerint, ha a bemenet földön van, akkor minden tranzisztor kinyit, vagyis a kimenet földre van húzva - ami rá van kötve a tápfeszültségre -> mindössze az a kérdés, a tápegység az erősebb, vagy az IC?
Ha feltételezzük, hogy a kapcsolási rajz készítője nem szándékosan tett bele egy durva hibát, kizárhatjuk a TD62304-est.

Lehetséges, hogy a TD62304-nek van egy invertáló változata és az kellene neked.
Vagy az is lehet, hogy mégis ez kell, de a készítő valóban elrontotta az IC3 nem használt egységeinek kezelését.
A program ismeretében esetleg kideríthető lenne, de nem biztos...

Esetleg be tudnád linkelni, hogy hol találtad a rajzot? Hátha ott lehet találni valami támpontot.
(#) Zsombi13 válasza lazsi hozzászólására (») Jún 29, 2020 /
 
Persze!
Ezen az oldalon található leírás alapján szeretném utánépíteni. A rajzot eagle formátumban le is lehet tölteni
(#) Massawa válasza Zsombi13 hozzászólására (») Jún 30, 2020 /
 
Miért nem raksz ULN-t. Az pontosan ezt teszi. Nem tudom mennyi LED-t hajtasz meg, de az ULN elég erös, (500mA) annak már elégnek kell lennie. ( ráadásul az szinte minden boltban kaphato).
(#) lazsi válasza Zsombi13 hozzászólására (») Jún 30, 2020 /
 
A fényképeken TD62304-eseket látok, viszont az IC3-as használatlan egységeit szerintem nem kötötte földre/tápra (a kapcsolási rajzzal ellentétben).

De azt hiszem, Massawa megadta a legjobb megoldást.
(#) Zsombi13 válasza Massawa hozzászólására (») Jún 30, 2020 /
 
Találtam itt a HESTORE-ban egy ULN2003A nevűt, erre gondoltál? ez is ugyanúgy 7 csatornás, mint ami a rajzon szerepel, ugyanannyi lába van, hasonló az egyes belső egységek rajza is. Az egyetlen rész, amit nem annyira értek, hogy ennél a nyolcas láb az "E", a kilences pedig a "COM". Azon, ami a rajzon szerepel (tekintsük el most az elnevezésbeli komplikációktól, nagy az esély, hogy csak elírás) a nyolcas láb a "GND" illetve a kilences a "Vcc. Ez esetben hogyan kéne bekötni? Az "E" és a "COM" az mit jelent? Feltételezem, hogy hasonló szerepeket tölthetnek be, mint a másik tranzisztormező hasonló számú lábai, de inkánn megkérdezem, szeretném megtudni, jól gondolom-e.

Valamint ide válaszolnék lazsinak is:
Ezt hogy érted? Arra gondolsz, hogy az IC3-nak a 3-8 illetve 9-14 lábai egy kondenzátorral mondhatni össze vannak kötve? Vagy ezt az előbbit csak az én kevésbé szakértő szemem látja így?
(#) Massawa válasza Zsombi13 hozzászólására (») Jún 30, 2020 /
 
Azért ha beütötted volna a gugliba egyböl minden világos lenne.
A 8. Láb a GND, a 9.és meg a közös kimeneti Vcc ( pozitiv feszültség, azaz a fogyaszto a Vcc meg az OUT között van.
(#) Zsombi13 válasza Massawa hozzászólására (») Júl 1, 2020 /
 
Igazad van, bocsánat! Azért köszönöm, hogy válaszoltál, Így már minden sokkal egyértelműbb. A ledek, amiket kinéztem hozzá, darabonként 20 mA-esek, a tranzisztormező pedig 600 mA-t tud, és a legjobban leterheltre is csak 420 mA jut, szóval szerintem ezzel nem lesz gond. Azonban a ledeknek 2-2.5 V az üzemi feszültségük az adatlap szerint, ez mennyire probléma? Az ilyen AVR-es áramköröknél mekkora feszültségű tápot kell neki adni? 5V ?
(#) Massawa válasza Zsombi13 hozzászólására (») Júl 1, 2020 /
 
Egy kicsit azért elmélyedhetnél az alapokban, ha még egy LED is problémát okoz akkor nem kellene mindjárt egy AVR-rel kisérletezned.
Az AVR kimenet és az ULN bemenete logikai szint azaz 0 és 5 V - ezzel nimcs semmi gond. A LED-knél meg az áram a mérvado nem a feszültség, számold ki mekkora áramot akarsz a LED- be vezetni (max 20 mA, de sok LED már 2 mA-nél is vakit). Minden LEDdel köss sorba egy megfelelö ellenállást a pozitiv táp meg a ULN kimenete között.
(#) lazsi válasza Zsombi13 hozzászólására (») Júl 1, 2020 /
 
A kondenzátornak ilyen szempontból semmi jelentősége. (Egyébként a tápfeszültséget szűrné, már amennyire egy 10 pF-os kondenzátor szűrni tud... Vagyis annak a két kondenzátornak semmilyen szempontból nincs jelentősége...)

Mivel az IC nem invertáló (adatlapon le van írva, de a belső kapcsolása alapján is), így ha a bemenete földre van kötve (ahogyan a rajzon), akkor a kimenetét is földre húzza a tranzisztor (amit pirossal berajzoltam). Ekkor a tápfeszültséget az 5 db. használaton kívüli tranzisztor rövidre zárja (a pirossal berajzolt nyomvonalon).
(#) Massawa válasza lazsi hozzászólására (») Júl 1, 2020 /
 
Azért itt látni mekkora szemétdomb az internet, és mindig akadnak emberek akik a legrosszabb megoldásokat találják meg. Ez a kapcsolás is több sebböl vérzik. Nem tudom, hogy mi vezette a kapcsolás tervezöjét arra, hogy a bemenetet meg a kimenetet is összekösse a táp egyik polusával. Alapvéve ez egy komoly tervezési hiba, és akár a chip halálához is vezethet. Alapszabály, egy kimenetet soha nem szabad sem a táphoz sem a GND-hez kötni.
Az ULN-nél ezzel nem is lenne nagyon gond, mert ha annak a bemenete 0 V a kimeneten magas szint van ( open collector), de teljesen felesleges azon láboknak az összekötése.
A hozzászólás módosítva: Júl 1, 2020
(#) Sipy hozzászólása Júl 2, 2020 /
 
Sziasztok! Még decemberben elkezdtem egy robotot arduinoval amit végül feladtam mert a gépem nem tudja lefordítani a forráskódra a programot. Ezért most elkezdtem megcsinálni egy atmega8-al. Igazából majdnem minden működik rajta az sg90-es szervomotort nem sikerült vezérelni. Csak aprókat ugrik, néha nagyobbakat. Lehet hogy hibás a szervo? Több módon próbáltam. Most dolgozok de otthon teszek a tápra egy 100 nanos kondit, hátha a tápfesz nem tetszik neki. Járt már így valaki ezzel a motorral?
(#) cua hozzászólása Júl 3, 2020 /
 
Belefutottam ma egy olyan kerdesbe, ami eddig valahogy mindig elkerult.
Ha kisebb project van, akkor altalaban az avra assembler-t hasznalom, ahol ugye a preprocessor az .eseg utan tudja, hogy az eprom-ba szeretnem tuszkolni az adatokat, szpen le is generalja az *.eep.hex-et.
Ma viszont az avr-gcc builtin assembly-t hasznaltam (ez ugye a platformio default peldaul CLion alatt), ahol viszont egyszeruen nem jottem ra hogyan fernek hozza az eeprom-hoz.
Probaltam a .section .eeprom formatumot, amikor ugyan leforditja, az avr-objdump szepen mutatja is a .elf file-ban (00810000-nel, ahol lennie is kell ) de nem tudok belole eep (hex) file-t varazsolni az avr-objcopy-val.
Elcsesztem kb egy orat netes bongeszessel de nem talaltam ra megoldast, ami mar onmagaban is furcsa
Hasznalja valaki ezt a kombinaciot? Vagy valamit nagyon sulyosan nem olvastam?
(#) cua válasza cua hozzászólására (») Júl 3, 2020 /
 
Kozben rajottem hogy mit felejtettem el
Igy probaltam (mert ugye):
  1. avr-objcopy -j .eeprom -O ihex .pio/build/attiny85/firmware.elf eep.hex

Csak elfeledkeztem egy 'aprosagrol' (pedig emlitettem is a kerdesemben):
  1. avr-objcopy -j .eeprom  --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0  --no-change-warnings -O ihex .pio/build/attiny85/firmware.elf eep.hex

Igy mar mukodott.
(#) Ivan93 válasza Sipy hozzászólására (») Júl 3, 2020 /
 
Szia! Én akkor jártam hasonlóan, amikor 9V elem + 7805-el próbáltam táplálni az avr-t és a szervót. Rendes tápról szépen működött, a 9V elem gyenge volt hozzá.
(#) Sipy válasza Ivan93 hozzászólására (») Júl 7, 2020 /
 
Én is pont azzal csináltam de végülis nem az volt a gond. Én értelmeztem félre a vezérlést és folyamatos pwm jelet küldtem neki. Most más gondom akadt. Van ez a HC SR04 ultrahangos távolságmérő. Azt használnám tájékozódásra de valamiért nem akar egymás után többet mérni csak egyet. Két mérés között kb fél másodperc lenne, de már a második alkalommal hiába kapja meg a trigger jelet, az echo láb nem vált magas szintre és ott ahol várja elakad a program emiatt. Erre nincs valami ötlet? Már vettem új szenzort is de ugyanaz a baj.
(#) Sick-Bastard hozzászólása Júl 7, 2020 /
 
Üdv!

Egy MCP7940N-es RTC IC-t próbálok az AVR-emhez beilleszteni saját TWI könyvtárammal.
A TWI könyvtáram nem tökéletes, de működik. EERAM, MCP23017 írás olvasás is megy.
Probléma: Nem tudok byte-onként olvasni, de szekvenciálisan igen.
Viszont a byte/szekvenciális írás megy.

A legnagyobb gyengeségem a pointerek használata, ezért szerintem a hiba valahol az egyik foo(*return_data)-ban lesz. Még nem rögzült a szürkeállományomban, mikor is kell data-t, *data-t vagy &data-t használni (vagy akár &data[i])...

Az MCP7940_Byte_RD(address, *data)-ban található 3 foo()-t "kibontva" is mellékeltem, mint jegyzet.

Biztosan nem látom a fától az erdőt.

  1. unsigned char MCP7940_Start_WRD(unsigned char control_byte, unsigned char status)
  2. {
  3.         unsigned char twi_at = 0;
  4.        
  5.         if(TWI_Send_START() >= 0)
  6.         {
  7.                 twi_at++;
  8.                 if(TWI_MT_Byte(control_byte, status) == 0)
  9.                 {
  10.                         twi_at++;
  11.                         mcp7940_sreg.b[0] |= MCP7940_AV;
  12.                         mcp7940_sreg.b[1] &= ~(MCP7940_ERROR | MCP7940_IDLE | MCP7940_RD);
  13.                 }
  14.                 else
  15.                 {
  16.                         mcp7940_sreg.b[0] &= ~(MCP7940_AV | MCP7940_INIT);
  17.                         mcp7940_sreg.b[1] |= MCP7940_ERROR;
  18.                 }
  19.         }
  20.        
  21.         return(twi_at);
  22. }
  23.  
  24. #define MCP7940_Start_WR()       MCP7940_Start_WRD(MCP7940_DEV_WR, TWI_MT_SLAW_ACK)
  25. #define MCP7940_Start_RD()       MCP7940_Start_WRD(MCP7940_DEV_RD, TWI_MR_SLAR_ACK)
  26.  
  27. unsigned char MCP7940_Current_RD(unsigned char* data)
  28. {
  29.         unsigned char twi_at = 0;
  30.         twi_at =  MCP7940_Start_RD();
  31.        
  32.         if(mcp7940_sreg.b[0] & (MCP7940_AV | MCP7940_EN))
  33.         {              
  34.                 twi_at++;
  35.                 TWI_MR_Byte(TWI_CMD_MR_NACK, TWI_MR_DATA_NACK, &data);
  36.         }
  37.        
  38.         MCP7940_STOP();
  39.         return(twi_at);
  40. }
  41.  
  42. unsigned char MCP7940_Byte_RD(unsigned char address, unsigned char* data)
  43. {
  44.         unsigned char twi_at = MCP7940_Start_WR();            // Send Start command + Dev Control Byte
  45.         TWI_MT_Byte(address, TWI_MT_DATA_ACK);      // Set Register Address
  46.         twi_at += MCP7940_Current_RD(&data);            // ReSend Start command + Dev Control Byte, get Data send NACK
  47.        
  48.         /*     
  49.         //      unsigned char twi_at = MCP7940_Start_WR();
  50.         unsigned char twi_at = 0;
  51.        
  52.         if(TWI_Send_START() >= 0)
  53.         {
  54.                 twi_at++;
  55.                 if(TWI_MT_Byte(MCP7940_DEV_WR, TWI_MT_SLAW_ACK) == 0)
  56.                 {
  57.                         twi_at++;
  58.                         mcp7940_sreg.b[0] |= MCP7940_AV;
  59.                         mcp7940_sreg.b[1] &= ~(MCP7940_ERROR | MCP7940_IDLE | MCP7940_RD);
  60.                 }
  61.                 else
  62.                 {
  63.                         mcp7940_sreg.b[0] &= ~(MCP7940_AV | MCP7940_INIT);
  64.                         mcp7940_sreg.b[1] |= MCP7940_ERROR;
  65.                 }
  66.         }
  67.         // End of MCP7940_Start_WR();
  68.        
  69.         TWI_MT_Byte(address, TWI_MT_DATA_ACK);      // Set Register Address
  70.        
  71.         //twi_at += MCP7940_Current_RD(&data);
  72.        
  73.         //twi_at +=  MCP7940_Start_RD();
  74.        
  75.         if(TWI_Send_START() >= 0)                                          // Not RepStart
  76.         {
  77.                 twi_at++;
  78.                 if(TWI_MT_Byte(MCP7940_DEV_RD, TWI_MR_SLAR_ACK) == 0)
  79.                 {
  80.                         twi_at++;
  81.                         mcp7940_sreg.b[0] |= MCP7940_AV;
  82.                         mcp7940_sreg.b[1] &= ~(MCP7940_ERROR | MCP7940_IDLE | MCP7940_RD);
  83.                 }
  84.                 else
  85.                 {
  86.                         mcp7940_sreg.b[0] &= ~(MCP7940_AV | MCP7940_INIT);
  87.                         mcp7940_sreg.b[1] |= MCP7940_ERROR;
  88.                 }
  89.         }
  90.         // End of MCP7940_Start_RD();
  91.        
  92.         if(mcp7940_sreg.b[0] & (MCP7940_AV | MCP7940_EN))
  93.         {
  94.                 twi_at++;
  95.                 TWI_MR_Byte(TWI_CMD_MR_NACK, TWI_MR_DATA_NACK, &data);
  96.         }
  97.        
  98.         MCP7940_STOP();
  99.        
  100.         // End of MCP7940_Current_RD(&data);
  101.         */
  102.         return(twi_at);  // twi_at == 5 else error
  103. }
  104.  
  105. unsigned char MCP7940_SEQ_RD(unsigned char address, unsigned char length, unsigned char data[])
  106. {
  107.         unsigned char twi_at =  MCP7940_Start_WR();          // Set MCP7940 Address
  108.        
  109.         if(mcp7940_sreg.b[0] & (MCP7940_AV | MCP7940_EN))
  110.         {
  111.                
  112.                 TWI_MT_Byte(address,TWI_MT_DATA_ACK);
  113.                
  114.                 twi_at += MCP7940_Start_RD();
  115.                
  116.                 for(unsigned char i = 0, size = length - 1; i < size; i++, twi_at++)
  117.                 {
  118.                         TWI_MR_Byte(TWI_CMD_MR_ACK, TWI_MR_DATA_ACK, &data[i]);
  119.                 }
  120.                
  121.                 TWI_MR_Byte(TWI_CMD_MR_NACK, TWI_MR_DATA_NACK, &data[length - 1]);
  122.         }
  123.         else
  124.         {
  125.                 mcp7940_sreg.b[1] |= MCP7940_ERROR;
  126.         }
  127.        
  128.         MCP7940_STOP();
  129.         return(twi_at);  // twi_at == 5 else error
  130. }
(#) zolee1209 válasza Sipy hozzászólására (») Júl 7, 2020 /
 
Bővebben: Link
A timing diagramnak megfelel a programod?
Következő: »»   815 / 821
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