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   474 / 840
(#) kurosaki válasza sgt hozzászólására (») Szept 4, 2012 /
 
Köszönöm a választ.
tudsz ilyenre példát mutatni? mert a mostani koddal csak percenkent csipog es villan eccere.Sajna akárhogy átirom ebben a kodban Igaz Vagy hamis van ha azt kitudnam venni es a generate_tone(10000,300); reszt betenni egy C4HANG_ON OFF ra eccerübb lenne szmomra de hiaba raktam bele kiegeszitve a LED reszt nem kapcsolja be a hangot .

Attiny13 lenyegeben egyszerübb müveletekre alkalmas akkor.
(#) dB_Thunder válasza kurosaki hozzászólására (») Szept 4, 2012 /
 
Idézet:
„eccere..........eccerübb”
egyszerre, egyszerűbb !!!! Plusz nagybetűk hiánya, köbzé látná főbe lőne!
(#) kurosaki válasza dB_Thunder hozzászólására (») Szept 4, 2012 /
 
Bocsánat, hogy nem irok nagy betükkel meg ékezettel de meg szokás.Eljutottam addig, hogy mar csipog es szinkronban van a led es a piezó.Hogy lenne egyszerübb megoldani az 5perces csipogast majd a gyorsulasat? Perpil 500MS van 5 ször majd ezt csökkentem 100 MS ig (lehet igy mar tul sok neki és nem képes lekezelni?.
(#) csabeszq hozzászólása Szept 4, 2012 /
 
Lenne egy kérdésem gyors AVR<->PC kommunikációval kapcsolatban. Hogyan illik megoldani?

1. UART (soros port nem minden gépben van, de beszerezhető USB-s változat fillérekért)
2. FT232RL (drága, nem DIP tokozás, mellesleg ugyanaz, mint az USB-soros port átalakító)
3. UART -> nincs táp, külső adapter kell, az USB-ről 5V-ot kivezetni igencsak érdekes megoldás lenne
4. v-usb-ről nincs információm, hogy mennyire akasztja meg a chipet, de nem kifejezetten örülnék, ha 1 ms-ig kompletten megállna minden

Szóval érdekelne, hogy mit használtok.
(#) kurosaki válasza csabeszq hozzászólására (») Szept 4, 2012 /
 
Szia
Én egy USBASP használok.AKkora mint egy Pendrive csak annyi a külömbség hogy szallagkábel jön kibelöle 10PIN es 4 Földelés van rajta stb én azt ajánlom bár ez az én véleményem.



EDIT_-
  1. m_delay_10ms(1000); //100*10ms = 1s
  2.                                          C4_ON();
  3.                                          generate_tone(100000,200);
  4.                                          C4_OFF();
  5.                                
  6.                                 m_delay_10ms(10); //100*10ms = 1s
  7.                                
  8.                                                  C4_ON();
  9.                                                  generate_tone(100000,200);
  10.                                                  C4_OFF();
  11.                                                  
  12.                                                  m_delay_10ms(10); //100*10ms = 1s

ebben mi a hiba? mert csak az elejet veszi figyelembe.
A hozzászólás módosítva: Szept 4, 2012
(#) Csépe Zoltán válasza Csépe Zoltán hozzászólására (») Szept 4, 2012 /
 
Valaki tudna segíteni?

Még egy információ, mikor sima ledekkel és előtét ellenállással dolgoztam akkor a szoftver tökéletesen működött. Köszönöm a segítséget előre is.
(#) kurosaki válasza Csépe Zoltán hozzászólására (») Szept 4, 2012 /
 
lehet hülyeséget irok de elegendö az erőforrás a meghajtáshoz?vagy nem kötöttél félre valamit? télleg bocsi, hogy beleszolok ^^

esetleg hátha tudsz kicsit segiteni ha rá érsz.

  1. m_delay_10ms(1000); //100*10ms = 1s
  2.                                          C4_ON();
  3.                                          generate_tone(100000,200);
  4.                                          C4_OFF();
  5.                                
  6.                                 m_delay_10ms(10); //100*10ms = 1s
  7.                                
  8.                                                  C4_ON();
  9.                                                  generate_tone(100000,200);
  10.                                                  C4_OFF();
  11.                                                  
  12.                                                  m_delay_10ms(10); //100*10ms = 1s


itt szerinted mi lehet a problema??? http://www.hobbielektronika.hu/cikkek/nyolc_labbal_i_resz.html?pg=5 ez a felhasznált kód. nem veszi figyelembe a delayeket.
A hozzászólás módosítva: Szept 4, 2012
(#) Csépe Zoltán válasza kurosaki hozzászólására (») Szept 4, 2012 /
 
Szerintem elbírja a tápegység a két ledet, egy Pc-tápot alakítottam át a meghajtásra.
(#) kurosaki válasza Csépe Zoltán hozzászólására (») Szept 4, 2012 /
 
Akkor a rossz bekötés amire tudok tippelni.
Nem kötöttél félre semmit? télleg bocsi
A hozzászólás módosítva: Szept 4, 2012
(#) Csépe Zoltán válasza kurosaki hozzászólására (») Szept 4, 2012 /
 
Semmi gond. Megnézem azt is, megtudnád az egész kódod osztani?
(#) kurosaki válasza Csépe Zoltán hozzászólására (») Szept 4, 2012 /
 
Tessek nagy nehezen kivettem az IF et és az Elset most beallitom h percenkent csipogjon az ok.de nekem úgykéne, hogy 45mp es legyen es egyre jobban csipogjon.Beállitottam mindent de csak a legelsö delayt vette hiaba klonoztam azt a 5 sort.
  1. #define C4_ON()    PORTB |=  (1<<PB4)
  2.      #define C4_OFF()    PORTB &= ~(1<<PB4)
  3.          
  4.              #include <avr/io.h>
  5.              #include <util/delay.h>
  6.              
  7.              //-------------------------------------
  8.              void m_delay_10ms(unsigned long val) {
  9.                      //-------------------------------------
  10.                      while(val--) _delay_ms(10);
  11.              }
  12.              
  13.              //-------------------------------------
  14.              void do_delay(uint16_t ms_delay, uint16_t num_ms, uint16_t us_delay, uint16_t num_us)  {
  15.                      //-------------------------------------
  16.                      uint16_t i;
  17.                      
  18.                      for(i=0;i<num_ms;i++) _delay_ms(250);
  19.                      for(i=0;i<ms_delay;i++) _delay_ms(1);
  20.                      for(i=0;i<num_us;i++) _delay_us(250);
  21.                      for(i=0;i<us_delay;i++) _delay_us(1);
  22.              }
  23.              
  24.              
  25.              //-------------------------------------
  26.              void generate_tone(uint16_t frequency, uint16_t duration)
  27.              //-------------------------------------
  28.              {
  29.                      uint32_t total_delay_time;
  30.                      uint16_t total_ms_delay_time, total_us_delay_time;
  31.                      uint16_t num_us_delays, num_ms_delays, ms_delay_time, us_delay_time;
  32.                      uint16_t num_periods;
  33.                      
  34.                      total_delay_time = (1000000/frequency)/2-10;
  35.                      
  36.                      total_ms_delay_time = total_delay_time/1000;
  37.                      num_ms_delays = total_ms_delay_time/250;
  38.                      ms_delay_time = total_ms_delay_time%250;
  39.                      
  40.                      total_us_delay_time = total_delay_time%1000;
  41.                      num_us_delays = total_us_delay_time/250;
  42.                      us_delay_time = total_us_delay_time%250;
  43.                      
  44.                      num_periods = ((uint32_t)duration*1000)/(1000000/frequency);
  45.                      
  46.                      while((num_periods--) != 0)
  47.                      {
  48.                              do_delay(ms_delay_time, num_ms_delays, us_delay_time, num_us_delays);
  49.                              PORTB |=  (1<<PINB3);
  50.                              do_delay(ms_delay_time, num_ms_delays, us_delay_time, num_us_delays);
  51.                              PORTB &= ~(1<<PINB3);
  52.                      }
  53.                      
  54.                      return;
  55.              }
  56.              
  57.              //-------------------------------------
  58.              int main(void) {
  59.        
  60.                                  uint8_t state;
  61.                                  
  62.                                  
  63.                                  DDRB = (1<<PINB3)|(1<<PINB4); //csak a PB3 és a PB4 kimenet
  64.                                 state = 0;
  65.                                  while(1) {
  66.                                          m_delay_10ms(100); //100*10ms = 1s
  67.                                          C4_ON();
  68.                                          generate_tone(28000,200);
  69.                                          C4_OFF();
  70.                                
  71.                        
  72.                                                                                  
  73.                      }
  74.                      return 0;
  75.              }
(#) Csépe Zoltán válasza kurosaki hozzászólására (») Szept 4, 2012 /
 
Mi lenne ha while-ban növelnéd a frekvenciát és fix időközönként csipognál?
  1. int freq=1000;
  2. while(1) {
  3.                                          m_delay_10ms(450); //450*10ms = 45s
  4.                                          C4_ON();
  5.                                          generate_tone(freq,200);
  6.                                          C4_OFF();  
  7.                                          freq=freq+200;                        
  8.                }
A hozzászólás módosítva: Szept 4, 2012
(#) kurosaki válasza Csépe Zoltán hozzászólására (») Szept 4, 2012 /
 
Aza baj hogy elethüség miatt egyre gyorsabban kene. Ez jelezné a játékosoknak, hogy sietni kéne.Airsoft kellék lenne. Eleinte vagy gombal lehetne kikapcsolni majd bonyolitanam de még a csipogást se tudom megoldani mert nem veszi figyelembe.
Amugy ha jol látom a frekvenciat állitottad de nekem a Delay kéne hog csökkenjen most a freq az a kiadott hangot szabalyozza nem?
(#) Csépe Zoltán válasza kurosaki hozzászólására (») Szept 4, 2012 /
 
Akkor a delay paraméterét is változtatni kell a while-ban.
(#) kurosaki válasza Csépe Zoltán hozzászólására (») Szept 4, 2012 /
 
Most ez nekem magas.Ahogy nézem te a Kiadott hang Frekvenciajat változoba raktad es minden egyes lejatszasnal 200 al meg növelted?.Annak fixnek kell lennie es az idöt kene valahogy megoldani annal is menne ez a valtozos?csak kivonassal?

  1. int freq=400;
  2.                             while(1) {
  3.                                     m_delay_10ms(freq); //450*10ms = 45s
  4.                                     C4_ON();
  5.                                     generate_tone(28000,200);
  6.                                     C4_OFF();
  7.                                     freq=freq-100;
  8.                             }


nem lett gyorsabb a csipogas ://///
A hozzászólás módosítva: Szept 4, 2012
(#) zombee válasza csabeszq hozzászólására (») Szept 4, 2012 /
 
Ha még aktuális a kérdés:
max232+USB-soros átalakító tökéletes. külön táp kell? mér, az AVR-nek nem kell? max. kivezeted az átalakítóból...
MCP2200 - ugyanazt tudja mint az FTDI, ára kb. fele-harmada, és van könnyen forrasztható SOIC tokos is.
(#) Csépe Zoltán válasza kurosaki hozzászólására (») Szept 4, 2012 /
 
Igen.
  1. int time=450;
  2. while(1) {
  3.                                          m_delay_10ms(time); //450*10ms = 45s
  4.                                          C4_ON();
  5.                                          generate_tone(1000,200);
  6.                                          C4_OFF();  
  7.                                          time=time-10;                      
  8.                }
(#) kurosaki válasza Csépe Zoltán hozzászólására (») Szept 4, 2012 /
 
Énis ezt csinaltam epp.
de nem var 45 másodpercet hanem 5 másodpercenkent pittyeg. És a tiednel is ://
nem lehet hogy a feljebbi kodok amik a while on kivül vannak befolyasoljak a delayet?
A hozzászólás módosítva: Szept 4, 2012
(#) Axel hozzászólása Szept 4, 2012 /
 
Sziasztok!

Elmagyaráznátok nekem a következő kódot:
  1. .EQU MyPreferredStorageCell = SRAM_START
  2. .DEF MyPreferredRegister = R1
  3. .DEF AnotherRegister = R2
  4. .DEF AndYetAnotherRegister = R3
  5. LDI XH, HIGH(MyPreferredStorageCell)
  6. LDI XL, LOW(MyPreferredStorageCell)
  7. LD MyPreferredRegister, X+
  8. LD AnotherRegister, X+
  9. LD AndYetAnotherRegister, X

Az eleje világos és az is, hogy LDI-nél az X pointert ráállítja a az SRAM egy adott címére. Ami utána jön az viszont nem teljesen. Amire gondolok az, hogy betölti az adott című SRAM cella tartalmát R1-be, aztán inkrementálva a cellacímet az ottani értéket R2-be és ugyanígy r3-nál is. Mi történne ha így volna?:
  1. LD MyPreferredRegister, X
  2. LD AnotherRegister, X+
  3. LD AndYetAnotherRegister, X+

R2-be változatlanul kerülne be R1 értéke ugyanarról az SRAM címről R3 feltöltése után pedig jönne egy "fölösleges" címinkrementálás?

Előre is köszi!
(#) icserny válasza csabeszq hozzászólására (») Szept 4, 2012 /
 
Idézet:
„Szóval érdekelne, hogy mit használtok.”
ftdi-ttl-232r-3v3 kábel (van 5 V-os változata is), CP2102 vagy PL2303 USB TTL modul, vagy CA42 kábel. Az E-bay kiapadhatatlan forrása ezeknek...

A mikrovezérlő közvetlenül ráköthető a TTL kivezetésekre, nem kell RS232 szintillesztő!
(#) Csépe Zoltán válasza kurosaki hozzászólására (») Szept 4, 2012 /
 
Nem hiszem, hogy más befolyásolná. Hogy szeretnéd pontosan hogyan csipogjon?

A saját problémámnál jól van bekötve minden csak egyszerre nem világít a két led.
A hozzászólás módosítva: Szept 4, 2012
(#) kurosaki válasza Csépe Zoltán hozzászólására (») Szept 4, 2012 /
 
https://www.youtube.com/watch?v=ueBlmU2Ilr0 ilyesmi kéne.Ezt szeretném elérni csak picit lassaban.
(#) Csépe Zoltán hozzászólása Szept 4, 2012 /
 
Akkor a delay értékét kell csökkenteni egyre nagyobb értékkel.

  1. int time=450;
  2. int desc=5;
  3. while(1) {
  4.                                          m_delay_10ms(time); //450*10ms = 45s
  5.                                          C4_ON();
  6.                                          generate_tone(1000,200);
  7.                                          C4_OFF();  
  8.                                          time=time-desc;  
  9.                                          desc=desc+5;
  10.                }
A hozzászólás módosítva: Szept 4, 2012
(#) csabeszq válasza zombee hozzászólására (») Szept 4, 2012 /
 
zombee, logikai jelanalizátort csinálok (4 inputon a változást nézem us pontossággal), amit át kellene vinni PC oldalra. 500 Ft-ért már lehet 2 mega soros flash-et kapni, ami elég sok adatot el tud tárolni, ha kicsi lenne a RAM és gyors a váltás.

1 AVR + 1 max232 + 1 AT26DF161 kellene, meg a járulékos cuccok (kapacitások + kvarc +...)

Szóval simán elmenne a +5V-os USB-s tápról adapter nélkül.

Utánanézek az MCP2200-nak, hátha az bejön.
(#) kurosaki válasza Csépe Zoltán hozzászólására (») Szept 4, 2012 /
 
  1. #define C4_ON()    PORTB |=  (1<<PB4)
  2.      #define C4_OFF()    PORTB &= ~(1<<PB4)
  3.          
  4.              #include <avr/io.h>
  5.              #include <util/delay.h>
  6.              
  7.              //-------------------------------------
  8.              void m_delay_10ms(unsigned long val) {
  9.                      //-------------------------------------
  10.                      while(val--) _delay_ms(10);
  11.              }
  12.              
  13.              //-------------------------------------
  14.              void do_delay(uint16_t ms_delay, uint16_t num_ms, uint16_t us_delay, uint16_t num_us)  {
  15.                      //-------------------------------------
  16.                      uint16_t i;
  17.                      
  18.                      for(i=0;i<num_ms;i++) _delay_ms(250);
  19.                      for(i=0;i<ms_delay;i++) _delay_ms(1);
  20.                      for(i=0;i<num_us;i++) _delay_us(250);
  21.                      for(i=0;i<us_delay;i++) _delay_us(1);
  22.              }
  23.              
  24.              
  25.              //-------------------------------------
  26.              void generate_tone(uint16_t frequency, uint16_t duration)
  27.              //-------------------------------------
  28.              {
  29.                      uint32_t total_delay_time;
  30.                      uint16_t total_ms_delay_time, total_us_delay_time;
  31.                      uint16_t num_us_delays, num_ms_delays, ms_delay_time, us_delay_time;
  32.                      uint16_t num_periods;
  33.                      
  34.                      total_delay_time = (1000000/frequency)/2-10;
  35.                      
  36.                      total_ms_delay_time = total_delay_time/1000;
  37.                      num_ms_delays = total_ms_delay_time/250;
  38.                      ms_delay_time = total_ms_delay_time%250;
  39.                      
  40.                      total_us_delay_time = total_delay_time%1000;
  41.                      num_us_delays = total_us_delay_time/250;
  42.                      us_delay_time = total_us_delay_time%250;
  43.                      
  44.                      num_periods = ((uint32_t)duration*1000)/(1000000/frequency);
  45.                      
  46.                      while((num_periods--) != 0)
  47.                      {
  48.                              do_delay(ms_delay_time, num_ms_delays, us_delay_time, num_us_delays);
  49.                              PORTB |=  (1<<PINB3);
  50.                              do_delay(ms_delay_time, num_ms_delays, us_delay_time, num_us_delays);
  51.                              PORTB &= ~(1<<PINB3);
  52.                      }
  53.                      
  54.                      return;
  55.              }
  56.              
  57.              //-------------------------------------
  58.              int main(void) {
  59.        
  60.                                  
  61.                                  
  62.                                  
  63.                                  DDRB = (1<<PINB3)|(1<<PINB4); //csak a PB3 és a PB4 kimenet
  64.                                
  65.                     int time=450;
  66.                     int desc=5;
  67.                     while(1) {
  68.                             m_delay_10ms(time); //450*10ms = 45s
  69.                             C4_ON();
  70.                             generate_tone(28000,200);
  71.                             C4_OFF();
  72.                             time=time-desc;
  73.                             desc=desc+100;
  74.                     }
  75.                                                                                  
  76.                      
  77.                      return 0;
  78.              }


a Main on kivüli dolgok nem befolasoljak? mert ha 50 re irom az 5 öt ugyan ugy egyenletesen csipog
(#) Csépe Zoltán válasza kurosaki hozzászólására (») Szept 4, 2012 /
 
A time-ot is változtattad ha desc-et is?
(#) kurosaki válasza Csépe Zoltán hozzászólására (») Szept 4, 2012 /
 
  1. int time=450;
  2.                     int desc=5;
  3.                     while(1) {
  4.                             m_delay_10ms(time); //450*10ms = 45s
  5.                             C4_ON();
  6.                             generate_tone(28000,200);
  7.                             C4_OFF();
  8.                             time=time-desc;
  9.                             desc=desc+100; -csak ezt elvileg ezt kell csak nem? mert ez minden lefutasnal +100 al toldja meg az 5 öt nem? xal 105 lesz.
  10.                     }

nincs eccerübb modja a Hang nak? lehet aza sok Delay allitas ami a Main en kivül van az kavar be?
A hozzászólás módosítva: Szept 4, 2012
(#) Csépe Zoltán válasza kurosaki hozzászólására (») Szept 4, 2012 /
 
Figyelj a nyelvtanra mert így elég nehezen értelmezhető, hogy mit szeretnél és ne keverd a kódot a magyarázattal. A többi delay a megfelelő hang kialakításához kell.
(#) kurosaki válasza Csépe Zoltán hozzászólására (») Szept 4, 2012 /
 
Bocsánat.
Meik rész nem érthető leirom még1szer és bocsánat.


---Akármit állitok egyenletes csipogás nem gyorsul---
(#) Csépe Zoltán válasza kurosaki hozzászólására (») Szept 4, 2012 /
 
Amit az előbb küldtem kódot azzal hogyan működik?

Ehelyett pedig:
Idézet:
„Meik rész nem érthető leirom még1szer és bocsánat.”

Melyik rész nem érthető, leírom még egyszer és bocsánat.
Következő: »»   474 / 840
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