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   354 / 839
(#) Axel hozzászólása Aug 25, 2011 /
 
Sziasztok!

Ha megszakításvektorban akarok műveletet végezni valamilyen változóval akkor annak minden esetben globális változónak kell lenni? Továbbá az ISR-t mindig a main előtt kell deklarálni mint a függvényeket?

Köszi!
(#) neogeo2 válasza Stefan hozzászólására (») Aug 25, 2011 /
 
Akkor már inkább ez, de igaz hogy így nincsen csak 1 végtelen ciklus))

  1. while(1)
  2. {
  3.  
  4.   while(valami)   //futofény
  5.     {
  6.     }
  7.  
  8.   while(valami)   //villogo
  9.     {
  10.     }
  11.  
  12. }


vagy méginkább:

  1. switch(s)
  2. {
  3.    case "1":
  4.       ...
  5.    case "2":
  6.       ...
  7. }
(#) neogeo2 válasza Axel hozzászólására (») Aug 25, 2011 /
 
A változó legyen globális és volatile.

Az ISR lehet a main után is.
(#) zombee válasza Axel hozzászólására (») Aug 25, 2011 /
 
Az ISR lehet a program legvégén is, azt soha nem kell külön deklarálni. Azonban ügyelj arra hogy minden engedélyezendő interrupt le legyen kezelve!
Lokális változókat is nyugodtan használhatsz az interruptodban, akkor a stack-en végzi a műveleteket, de az interrupt befejezése után azokat nem fogod elérni. Például a ciklusváltozókat nem muszáj globálissá tenni...
Ügyelj arra, hogy az olyan globális változókat amelyeket az interrupton kívül a "fő programszál" vagy más interrupt is használ, a volatile makrót is tedd eléjük a deklarálásnál!
(#) sikolymester válasza Axel hozzászólására (») Aug 25, 2011 /
 
Ha jót akarsz magadnak, akkor nem csak, hogy globális változónak kell lennie a klasszikus C értelemben. Hanem ráadásul volatile előtagot is kell használni. Ez mondja meg az AVR fordítónak, hogy azt a változót interruptból is lehet változtatni, így minden művelet előtt beolvassa, nem pedig csak egy másolatot tart a regiszterben.

Vedd ezt az esetet: Van egy uint8_t típusú szam nevű változód mondjuk. Ha egy ponton a programban ehhez pl hozzáadsz 100-at, majd azt kiteszed a PORTA-ra, akkor ez így zajlik le kb: Beolvassa azt a változót az SRAM-ból az egyik szabad regiszterbe, elvégzi az összeadást a regiszterben, majd a regisztert teszi ki a PORTA-ra, legvégén pedig a regisztert visszaírja SRAM-ba. Azért dolgozik a regiszterből, mert az piszok gyors.
Nos ha az előző példánál egy interrupt pont akkor jön be, miután magának bemásolta a regiszterbe, és az interruptnál eggyel növelnéd az értéket pl. Akkor amikor a regiszterből a rendes programmenet visszaírja az SRAM-ba a regisztert, az fölülírja azt a változtatást, amit csinált az interrupt. Így a helyes x+101 helyett x+100 lesz az SRAMban a legvégén.

A volatile változó használata esetén minden műveletet SRAM-ból végez, ami így lassabb lesz. Részleteket lás az app noteokban és adatlapokban.

Tehát így használd az előző példa változóját:
  1. volatile uint8_t szam;


Természetesen a függvényeken kívül deklarálva, és ami ezt használni akarja, annak bigyessz oda egy extern deklarációt. Így globális lesz.

Ami a második kérdésed illeti, az arról árulkodik, hogy kicsit járatlan vagy C-ben, hiszen a függvényeket bárhol definiálhatod, hogyha a prototípusát a hívása előtt elhelyezed, konvenció szerint erre van ugye a header file. Ami az interrupt függvényt illeti, az is bárhol lehet, feltéve, hogy include-oltad az interrupt.h -t előtte.
(#) zombee válasza sikolymester hozzászólására (») Aug 25, 2011 1 /
 
A volatile nemcsak a regiszterben-tartás problémáját oldja meg, hanem a több bájtos változók használata előtt letiltja, majd a végén újra engedélyezi(persze ha előtte engedélyezve volt) az interruptokat. Ez egy 16-32 bites változónál rendesen eszi a flashmemóriát, így csak módjával!
(#) neogeo2 válasza zombee hozzászólására (») Aug 25, 2011 /
 
Ha jól emlékszem, a megszakításból csak a volatile változókat lehet elérni és használni, a többit nem. Mondjuk ebben nem vagyok biztos, majd kipróbálom...
(#) sikolymester válasza zombee hozzászólására (») Aug 25, 2011 /
 
Koszonom a plusz infot. Ezt reflexbol nem mertem leirni, mert nem voltam total biztos benne.
(#) Reggie válasza zombee hozzászólására (») Aug 25, 2011 /
 
Rosszul tudod.
A volatile nem tart regiszterben semmit es nem tiltja a megszakitasokat, ha nagyobb a valtozo, mint amit egy lepesben kezelni tudni(es mas esetben sem, erre a programozonak kell figyelnie). Mindossze a forditonak jelzi, hogy nem szabad optimalizalni a valtozo hasznalatat. A flash hasznalatan sokat nem valtoztat.
(#) Kiwy hozzászólása Aug 25, 2011 /
 
Sziasztok!
Egy gyors kérdésem lenne, a jártasabbak biztos tudják. Mi a különbség az ATmega8 és az ATmega8A között? Megnéztem az adatlapjukat, de nem vettem észre különbséget, árban viszont a sima 8-as egy kicsit olcsóbb. A bennük lévő memória mérete is megegyezik, pedig arra gyanakodtam, hogy abban különböznek.
üdv, Kiwy
(#) luxmanpower válasza Kiwy hozzászólására (») Aug 25, 2011 /
 
Összehasonlító táblázat paraméterek alapján, az atmel oldaláról:

Táblázat
(#) Reggie válasza Kiwy hozzászólására (») Aug 25, 2011 /
 
Mas benne a mag(ujabb), 2.7-5.5V-ig megy, mig a regi csak 4.5-5.5V-ig ment. Lenyegeben osszevontak a mega8 es mega8L tipusokat. Programozas szempontjabol tudtommal nincsen kulonbseg. Meg az errata is ugyan az.
(#) Kiwy válasza Reggie hozzászólására (») Aug 26, 2011 /
 
Na, az jó, erre voltam a leginkább kíváncsi Köszönöm szépen a segítségeteket!
(#) sikolymester válasza Kiwy hozzászólására (») Aug 26, 2011 /
 
Az összes A-val végződő típus gyakorlatilag teljesen kompatibilis az előző változatokkal. Ha jól rémlik, akkor a gyártásnál alkalmazott csíkszélességet csökkentették, ami ugye elméletben olcsóbb gyártást jelent (természetesen azonos selejt ráta esetén).
(#) TavIR-AVR válasza sikolymester hozzászólására (») Aug 26, 2011 /
 
Igen, csereszabatosak.
2 lényegi eltérés van:
- kisebb áramfelvétel, jobb sleep/idle áramfelvételek
- Vref, reset kis eltérés a szórás/billenési értékben

Az esetek 99,9%ában csereszabatos a régi 8L/8 és a 8A chip.

A régi sorozat kifut, és sok helyen már csak az A sorozat beszerezhető.
(#) Stefan válasza neogeo2 hozzászólására (») Aug 26, 2011 /
 
Én is így oldanám meg, de a kérdés a végtelen ciklusra volt specifikálva
(#) Robi98 válasza neogeo2 hozzászólására (») Aug 26, 2011 /
 
Köszönöm szépen az érthető válaszokat!
(#) Robi98 hozzászólása Aug 26, 2011 /
 
Sziasztok! Lenne még egy észrevételem ami számomra megmagyarázhatatlan:Amikor a konfigurációnál beállítottam az órajelet(1000000 hz-t)hogy jól működjön az időzítés és 115Khz-et ISP frekvenciának ,hogy az órajel 1/4-énél kisebb legyen (1000000/4=250Khz>115Kh)
Ennek ellenére jött a szokásos hibaüzenet ,hogy kapcsoljam be a CKDIV8-at ,hogy aZ ISP freki és az órajel egálba legyenek.Na ,de egálba volt nem de ?
Nos hát mit volt mit tenni bekapcsoltam a fuse-t és így már működött.És mikor elkészítettem a Topi által kifejlesztett jelzőlámpát(mivel még csak kezdő vagyok )az időzítés a Led-ek között hibátlanul ment.Pedig én arra számítottam,hogy a CKDIV8 miatt nyolcszor olyan gyorsan fog menni?

Magyarázatot kérek.
Előre is köszönöm!
(#) Kiwy válasza TavIR-AVR hozzászólására (») Aug 26, 2011 /
 
Mégegyszer köszönöm a részletes válaszokat!
(#) zombee válasza Robi98 hozzászólására (») Aug 26, 2011 /
 
A CKDIV8 8-adára LASSÍTJA az órajelet. Ha a FUSE biteknél 8MHz van beállítva(belső órajel) és 1000000Hz az F_CPU-n akkor minden korrekt. A "túl gyors" AVR órajel miatt soha nem hibázhat a programozás, csak ha lassabb mint az ISP freki 4-szerese. Azaz, a CKDIV8 bekapcsolásával inkább növeled a hiba valószínűségét. Persze egy Topi féle programozó tudja a 250kHz-et(még többet is), de az már más kérdés hogy minden ciklus után egy hosszú várakozás jön a szoftveres USB miatt, ezért is olyan lassú.
Tanács: Topi féle programozó mellett a CKDIV8 legyen kikapcsolva, és használd 430kHz-en.
(#) Hurka hozzászólása Aug 26, 2011 /
 
Hellosztok!
PCF8563-at kezelnék Bascom-AVR alatt, de nem tudom, hogyan álljak neki... Mi ennek az ICnek a címe? Hogy kell beállítani az időt? Hogy kell kiolvasni azt?
Segítségeteket előre is köszönöm: Hurka
(#) TavIR-AVR válasza Hurka hozzászólására (») Aug 26, 2011 / 6
 
ÓraiC Bascom-AVR alatt: PCF8583, PCF8563, RS5C372A/B....

A I2C-s PCF8563-as IC a Bascom/Samples alatt a clock.bas állományban van leírva. A PCF8563 és a PCF8583 nem kompatibilis!

  1. 'Clock (PCF8563T)
  2.   Const Clkaddr = &HA2                                     'A2
  3.    Dim Clk_s As Byte                                        'Second
  4.   Dim Clk_m As Byte                                        'Min
  5.    Dim Clk_h As Byte                                        'Hour
  6.   Dim Clk_d As Byte                                        'Day
  7.    Dim Clk_wm As Byte                                       'Month
  8.   Dim Clk_y As Byte                                        'Year/ev
  9.    Dim Clk_cent As Byte                                     'szazad 0-19xx, 1-20xx
  10.  
  11.   Lcd "Set Clock...        "
  12.   Waitms 100
  13.   I2cinit
  14.   I2cstart
  15.   I2cwbyte Clkaddr
  16.   If Err = 0 Then                                          'oraszinkron
  17.       I2cstart                                              'generate start
  18.      I2cwbyte Clkaddr                                      'write addres of PCF8583
  19.       I2cwbyte 2                                            'select second register
  20.      I2cstart                                              'generate repeated start
  21.       Temp1b = Clkaddr + 1
  22.       I2cwbyte Temp1b                                       'write address for reading info
  23.      I2crbyte Clk_s , Ack                                  '&h02 read seconds (00...59)
  24.  
  25.  
  26.       If Clk_s.7 = 1 Then
  27.          Csipog1                                            'Csak teszt! (elemkimerulest/elemhibat jelol)
  28.         Print "Error: Replace battery..."
  29.         Print "Time NOT synchronized."
  30.         Locate 4 , 1
  31.         Lcd "  Replace battery!  "                         'Nem torlom a jelzobitet, mert a SDre is irodjon ki!
  32.          Warning
  33.          Clk_s.7 = 0
  34.          Goto Kilep
  35.       End If
  36.  
  37.       I2crbyte Clk_m , Ack                                  '&h03 read minutes (00...59)
  38.      Clk_m.7 = 0                                           '7. bit torlese
  39.  
  40.       I2crbyte Clk_h , Ack                                  '&h04 read hours (00...23)
  41.      Clk_h.7 = 0
  42.      Clk_h.6 = 0
  43.  
  44.      I2crbyte Clk_d , Ack                                  '&h05 read days (01....31)
  45.       Clk_d.7 = 0
  46.       Clk_d.6 = 0
  47.       I2crbyte Temp1b , Ack                                 '&H06 weekday (nem haszn.) het napjai (0...6)
  48.      I2crbyte Clk_wm , Ack                                 '&h07 month/centaury (7.bit: cent. 1-20xx, 0-19xx)
  49.       Clk_cent = Clk_wm.7
  50.       Clk_wm.7 = 0
  51.       Clk_wm.6 = 0
  52.       Clk_wm.5 = 0
  53.       I2crbyte Clk_y , Nack                                 '&h08 Year
  54.      I2cstop                                               'generate stop
  55.  
  56.       Print "Ext:" ; Bcd(clk_h) ; ":" ; Bcd(clk_m) ; ":" ; Bcd(clk_s) ; "   " ; Bcd(clk_d) ; "." + Bcd(clk_wm) ; "." ; Bcd(clk_y)
  57.       Print "Int:" ; Time$ ; "   " ; Date$
  58.       'Print "Int. Time:" ; Time$
  59.      Tempstring20 = Bcd(clk_h) + ":" + Bcd(clk_m) + ":" + Bcd(clk_s)
  60.      Time$ = Tempstring20
  61.      'Print "In. Date:" ; Date$
  62.       Tempstring20 = Bcd(clk_d) + "." + Bcd(clk_wm) + "." + Bcd(clk_y)
  63.       Date$ = Tempstring20
  64.       Print "Time synchronized (Ext->Int)."
  65.  
  66.  
  67. -------------------------------------------
  68. '41: Read Clock
  69. '42: Set Clock
  70.  
  71.       Prog41:
  72.          Print "{027}[2JDate & Time status"
  73.          Do
  74.             I2cstart                                        'generate start
  75.            I2cwbyte Clkaddr                                'write addres of PCF8583
  76.             I2cwbyte 2                                      'select second register
  77.            I2cstart                                        'generate repeated start
  78.             L_temp1b = Clkaddr + 1
  79.             I2cwbyte L_temp1b                               'write address for reading info
  80.            I2crbyte Clk_s , Ack                            '&h02 read seconds (00...59)
  81.             If Clk_s.7 = 1 Then
  82.                Csipog1                                      'Csak teszt! (elemkimerulest jelol)
  83.               Print "Battery error!"
  84.               I2cstop
  85.               Warning
  86.  
  87.               Clk_s.7 = 0
  88.  
  89.               I2cstart                                     'repeated start
  90.                I2cwbyte Clkaddr                             'write mode
  91.               I2cwbyte 2                                   'select seconds Register
  92.                I2cwbyte Clk_s                               'Reset VL register
  93.               I2cstop
  94.  
  95.               I2cstart                                     'generate start
  96.                I2cwbyte Clkaddr                             'write addres of PCF8583
  97.               I2cwbyte 2                                   'select second register
  98.                I2cstart                                     'generate repeated start
  99.               L_temp1b = Clkaddr + 1
  100.               I2cwbyte L_temp1b                            'write address for reading info
  101.                I2crbyte Clk_s , Ack                         '&h02 read seconds (00...59)
  102.            End If
  103.  
  104.            Clk_s.7 = 0
  105.  
  106.            I2crbyte Clk_m , Ack                            '&h03 read minutes (00...59)
  107.             Clk_m.7 = 0                                     '7. bit torlese
  108.  
  109.            I2crbyte Clk_h , Ack                            '&h04 read hours (00...23)
  110.             Clk_h.7 = 0
  111.             Clk_h.6 = 0
  112.  
  113.             I2crbyte Clk_d , Ack                            '&h05 read days (01....31)
  114.            Clk_d.7 = 0
  115.            Clk_d.6 = 0
  116.            I2crbyte L_temp1b , Ack                         '&H06 weekday (nem haszn.) het napjai (0...6)
  117.             I2crbyte Clk_wm , Ack                           '&h07 month/centaury (7.bit: cent. 1-20xx, 0-19xx)
  118.            Clk_cent = Clk_wm.7
  119.            Clk_wm.7 = 0
  120.            Clk_wm.6 = 0
  121.            Clk_wm.5 = 0
  122.            I2crbyte Clk_y , Nack                           '&h08 Year
  123.             I2cstop                                         'generate stop
  124.            Print "{027}[2;1f";                             ' VT100 emulation set pos to 2,2
  125. '            L_tempstring20 = Bcd(clk_h) + ":" + Bcd(clk_m) + ":" + Bcd(clk_s)
  126.            Print "Ext:" ; Bcd(clk_h) ; ":" ; Bcd(clk_m) ; ":" ; Bcd(clk_s) ; "   "
  127.            Print "Int:" ; Time$
  128.            Print
  129.            Print "Ext:" ; Bcd(clk_d) ; "." ; Bcd(clk_wm) ; "." ;
  130.            If Clk_cent = 1 Then
  131.               Print "20";
  132.               Else
  133.               Print "19";
  134.            End If
  135.            Print Bcd(clk_y) ; "."
  136.            Print "Int:" ; Date$
  137.            Print "Err:" ; Err
  138.            Waitms 50
  139.           Ujraolvas:
  140.         Loop Until Inkey() = 27
  141.         Print "Int. Time:" ; Time$
  142.         L_tempstring20 = Bcd(clk_h) + ":" + Bcd(clk_m) + ":" + Bcd(clk_s)
  143.         Time$ = L_tempstring20
  144.         Print "In. Date:" ; Date$
  145.         L_tempstring20 = Bcd(clk_d) + "." + Bcd(clk_wm) + "." + Bcd(clk_y)
  146.         Date$ = L_tempstring20
  147.      Return
  148.  
  149. '------------------------------------------------------------------------------
  150.       Prog42:
  151.          Print "{027}[2JSet Date & Time"
  152.          Input "Year (1901-2099):" , L_temp1w
  153.          If L_temp1w = 0 Then Return
  154.          If L_temp1w < 2000 Then
  155.             Clk_cent = 0
  156.             Else
  157.             Clk_cent = 1
  158.          End If
  159.          L_temp1w = L_temp1w Mod 100
  160.          Clk_y = L_temp1w
  161.          Clk_y = Makebcd(clk_y)
  162.          Input "Month (01-12)   :" , Clk_wm
  163.          Input "Day (01-31)     :" , Clk_d
  164.          Input "Hour (00-23)    :" , Clk_h
  165.          Input "Minute (00-59)  :" , Clk_m
  166.          Input "Second (00-59)  :" , Clk_s
  167.  
  168.          Clk_s = Makebcd(clk_s)                             'seconds
  169.         Clk_m = Makebcd(clk_m)                             'minutes
  170.          Clk_h = Makebcd(clk_h)                             'hours
  171.         Clk_d = Makebcd(clk_d)                             'days
  172.          Clk_wm = Makebcd(clk_wm)                           'months
  173.         If Clk_cent = 1 Then Clk_wm.7 = 1
  174.  
  175.         I2cstart                                           'generate start
  176.          I2cwbyte Clkaddr                                   'write address
  177.         I2cwbyte 0                                         'select control register
  178.          I2cwbyte 0                                         'Control1 reg
  179.         I2cwbyte 0                                         'Control2 reg
  180.          I2cstart                                           'repeated start
  181.         I2cwbyte Clkaddr                                   'write mode
  182.          I2cwbyte 2                                         'select seconds Register
  183.         I2cwbyte Clk_s
  184.         I2cwbyte Clk_m
  185.         I2cwbyte Clk_h
  186.         I2cwbyte Clk_d
  187.         I2cwbyte 5                                         'het napja (nem fontos)
  188.          I2cwbyte Clk_wm
  189.          I2cwbyte Clk_y
  190.          I2cstop
  191.          Wait 2
  192.          Gosub Prog41
  193.       Return
(#) leglacika hozzászólása Aug 26, 2011 /
 
Sziasztok!

Egy kis C-s segítséget szeretnék kérni.
Utánépítettem egy autós fedélzeti komputer projectet.
Ez egy cseh project, a Praktiká Elektronika 2010/06 számában található.
Több problémám is volt vele.
Főképp az, hogy a mellékelt forráskódot a fordítóm túl nagyra fordította, nem fért bele a készülék agyába, egy ATMega8-ba.
Ezért "kicsit átszabtam" a forráskódot, kitöröltem belőle néhány funkciót, amire nincs szükségem.
Így már befért a Mega8-ba, és egy funkciót kivéve jól működik.
Ez a nem műküdő dolog pedig az ECU élőadatainak lekérdezése.
Odáig eljut, hogy kapcsolódik az ECU-hoz, szinkronizáció is sikeres.
Ezután "Get data...", ezen is túljut, de innen már nem írja ki a vett adatokat.
Csak egy "0" van az alsó sor 20. karakterén.
Az autómmal minden rendben, laptoppal kiolvasható,
a protokoll is stimmel, hardveresen is jónak tűnik.
A kérésem: megnéznétek a forráskódot, hogy miért ír nullát a vett adatok helyett ?
Lehet, hogy én babráltam el valamit, amikor variáltam a kóddal.
Esetleg volna ötletetek, mivel próbáljam lefordítani,
hogy az eredeti forrás is kellően kicsi HEX-et eredményezzen ?
Kipróbáltam az összes optimalizálási lehetőséget a fordítómban, de így is jóval nagyobb HEX készült, mint a Mega8 memóriája.
Hozzáteszem, én nem értek a C-hez, a "nyírbálást" is csak a logika, és az assembly-s tudásom alapján csináltam.
Mellékelem az ide vonatkozó, eredeti fájlokat.
Bocs, ha kicsit hosszúra sikerült a kérés!

Üdv.: Laci.
(#) zombee válasza Hurka hozzászólására (») Aug 26, 2011 / 2
 
Hello!

Bár látom hogy TavIR kolléga már megválaszolta a gyakorlati oldalról, én inkább a kérdésedre válaszolnék és adnék pár jótanácsot.

Ha egy új IC van a láthatáron, a nulladik lépés mindig az adatlap. Nem kell perfekt angol, de a programozáshoz egy minimális tudás nem árt. Gyorsszótárak is léteznek már. Én is így tanultam meg AVR-ezni: kezdetben nehéz volt, de már tudom hogy mi hol van és ez elég.

Szóval: a HE fórumot azért szeretem mert ha kapható náluk a cucc akkor belinkeli. A hozzászólásodnál is ez történt, két kattintás, és már töltöttem is le az adatlapot! A tartalomjegyzék is sokat segít, az eszköz címe 5 másodpercen belül meglett, itt: "I2C-bus protocol" - "Addressing"
Akkor a kérdésedre a bűvös válasz: Olvasás: A3h (10100011); Írás: A2h (10100010)
Csak egy negyed oldalt kell lefelé lapozni és ott van a regiszterek írási/olvasási mechanizmusa. Bascom alatt viszonylag könnyű, mert az I2C műveletek be vannak építve. AVR Studio és C nyelv mellett sem nehezebb, mert Bascom-mintára megírtam egy jó rövid I2C-könyvtárat, igaz, csak hardvereset.

Akkor egy kis általánosítás:
Ez az eszköz olyan, aminek regiszterei vannak és az eszköz használata lényegében ezeknek a regisztereknek az írásából-olvasásából áll. Pont mint egy AVR, csak itt kommunikáció van és lényegesen lassabb, de a cél szempontjából nem lényeges.
A regiszterek sorszámozva vannak, érdemes a rendes nevükkel definiálni őket, így mindig tudod mit írsz.
Könnyen lehet írni egy réteget a kommunikáció fölé, ahol Te már csak a regisztereket írod/olvasod, akár egyetlen műveletben. Így kell ezt csinálni, mert a sok i2cstart/write/read/stop között könnyen el lehet veszni!
Az interrupt is a regiszterekkel vezérelhető, de ha használni is akarod(pl. AVR-ébresztő funkció) akkor hardverrel is támogatnod kell: valamelyik INT lábra bekötni, interruptot leprogramozni.
Nem könnyű amit leírtam, nem tagadom hogy az MCP23009-es áramkörrel is alaposan meggyűlt a bajom mire szóra bírtam. De a sok tanulság az ami végül oda vezet hogy meg tudd érteni a működését és a jövőben más eszköznek is bátrabban nekiállsz és nem az lesz a legelső kérdésed hogy "mi az eszköz címe".
(#) Reggie válasza leglacika hozzászólására (») Aug 27, 2011 /
 
Nem te vagy az elso ezzel a problemaval. Sokat segitene, ha a kommenteket atforditanad magyarra. (Es esetleg a cseh roviditest/toredekszot/stb tartalmazo valtozok melle kommentelned a jelenteset).
(#) leglacika válasza Reggie hozzászólására (») Aug 27, 2011 /
 
Szia !

Hogy érted, hogy nem én vagyok az első ezzel a problémával ?
A cseh tudásom nulla. A Google fordítóján már átküldtem, de sok kifejezést nem ismer, a többit is elég értelmetlenre fordítja.
Ezért gondoltam, hogy egy profi C-s a kódból is elég sok mindent kihámoz...
Arra kéne rájönni, a szerző mivel fordított, hogy normális méretű HEX-et kapott...
Köszönöm a reagálást !
Üdv.: Laci.
(#) Robi98 válasza zombee hozzászólására (») Aug 27, 2011 /
 
A Fuse biteknél hol lehet beállítani az órajelet?
(#) Robi98 válasza zombee hozzászólására (») Aug 27, 2011 /
 
Köszönöm a jó tanácsokat! Én azt a programozót használom amit tőled rendeltem(ha nem tévedek)mert a Topi féle programozót csak KITT-ként lehetett beszerezni én meg nem vagyok valami jó forrasztó,a gépet meg azért nem akartam tönkre vágni ...
Ja és egyébként hol lehet beállítani az órajelet a Fuse biteknél?

Köszönöm!
(#) sikolymester válasza Robi98 hozzászólására (») Aug 27, 2011 /
 
Nem írtad milyen programban, így feltételezem, hogy Avrstudio 4-ben.
(#) sikolymester válasza leglacika hozzászólására (») Aug 27, 2011 /
 
Ezek most az eredeti fileok voltak, vagy az amibe már te belebütyköltél?
Azt tudod esetleg, hogy pontosan melyik sorban zajlik az a funkció, ami hibásan történik meg?
Ezek az infók mind sokat segítenének annak, aki megnézné a kódot neked.
Következő: »»   354 / 839
Bejelentkezés

Belépés

Hirdetés
XDT.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