Fórum témák

» Több friss téma
Fórum » Arduino
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Lapozás: OK   460 / 839
(#) kapu48 válasza vyky hozzászólására (») Júl 15, 2018 /
 
Idézet:
„ameddig nyomom a BUTTON-t olyan időközzel villog a led?”


Inkább ahány szór nyomom a BUTTON-t? Annyi szór 1000ms várakozás van a villogások között.
(#) kapu48 válasza vyky hozzászólására (») Júl 15, 2018 /
 
Még ezt szúrdbe :
  1. ...
  2. void loop() {
  3.   num = 0;  // Törli a szálálót
  4.   do{ //  Számolja a BUTTON eseményt
  5. ...
A hozzászólás módosítva: Júl 15, 2018
(#) devilke3000 válasza vyky hozzászólására (») Júl 15, 2018 /
 
Pergés ellen rakhatsz delay 30..50s is digitalread ....
A hozzászólás módosítva: Júl 15, 2018
(#) sargarigo válasza krauszkrisztian14 hozzászólására (») Júl 15, 2018 /
 
Ez már egy értelmezhető méret. Ez egy úgynevezett tárolós shift regiszter (latch). Először belépteted az adatot sorosan, aztán átírod a kimenetre a regiszter tartalmát. Előnye, hogy amíg shiftelsz, addig a kimeneten ez nem látszik, tehát nem fog villogni. Az adatlapja szerint ez az ic úgy működik, hogy SER bemenetre ráteszed az adatot, aztán az SRCLK pinnel lépteted egyet. Megint SER, aztán megint lépteted az SRCLK-val. Mindezt nyolcszor. Így szépen belépteted az összes bitet, és amikor ez megvolt, akkor kell az RCLK, amivel a shift regiszter állapotát átmásolod a kimenetre. Lehet léptetni a következő nyolcast, a kimenet nem változik amíg a következő RCLK meg nem érkezik. Nem beszéltünk még két kivezetésről, egyik az SRCLR, ez instant törli a shift tárolóban lévő biteket (figyelem, amíg RCLK nem érkezik, addig ezt sem veszed észre!). A másik az OE kivezetés, ez leválasztja a kimeneti lábakat a külvilágról. Erre akkor van szükség, amikor buszra van kötve az ic, mert ebben az állapotban mintha nem is létezne, úgy viselkedik (nagyimpedanciás állapot). Azok a lábak amiknek a neve egy vonallal felül van húzva, azok gnd-re aktívak (OE és SRCLR), a többi élvezérelt, tehát magasról alacsony szinre váltáskor lép működésbe. OE-t tehát alacsonyan tartod, SRCLR-t pedig magasban.
(#) vyky válasza kapu48 hozzászólására (») Júl 15, 2018 /
 
Hálás köszönet,ez valóban egy jó alap a készülő programhoz. Nagyon leköteleztél Remélem majd viszonozhatom valahogy.
(#) tbarath hozzászólása Júl 15, 2018 /
 
Lehet ez kicsit off, de attiny témában csak egy halott topicot találtam, és szerintem elfér itt is. Ja, arduino IDE-vel csináltam a kódot, szóval nem is annyira off.

Röviden: legalább 10 kHz nagyságrendű PWM jelet szeretnék a PB4 pin-en (TCCR1), de nem megy, 4 kHz fölé nem jutok el. Mit rontok el?

  1. #define LED_PIN_PWM 4
  2.  
  3. #include <avr/io.h>
  4. #include <util/delay.h>
  5.  
  6. void setup() {
  7.     pinMode(LED_PIN_PWM, OUTPUT);
  8.     TCCR1 = 0<<PWM1A | 0<<COM1A0 | 1<<CS10;
  9.     GTCCR = 1<<PWM1B | 2<<COM1B0;
  10.     OCR1C = 255;
  11. }
  12.  
  13. void loop() {
  14.     analogWrite(LED_PIN_PWM, 128);
  15. }

Datasheet szerint ennek 250 kHz-nek kellene lennie, ebből nekem a 4 kHz (25 usec periódushossz) sehogy se jön ki. A cpufreki 1 MHz, azt nem is nagyon akarom bántani.
Szerk.: attiny85, ezt elfelejtettem leírni
A hozzászólás módosítva: Júl 15, 2018
(#) Kovidivi válasza tbarath hozzászólására (») Júl 15, 2018 /
 
Ha 1MHz-ből 250KHz-es PWM jelet akarsz készíteni, akkor a proci minden 4. órajelénél vége egy periódusnak. Így ha az OCR értéket 0-nak hagyod, akkor az órajel szerint lesz 4 alacsony jeled, majd periódus újraindul. Ha OCR = 1, akkor 1 magas, 3 alacsony, és újraindul. Ha OCR 2, akkor vagyunk 50% kitöltési tényezőnél, 2 magas, 2 alacsony kimeneted lesz, majd újraindul a periódus.
250KHz-es PWM-hez 1MHz-en csak 4 érték társul. 16MHz-en se sokkal jobb a helyzet, de már használható valamire: 16000000/250000=64 értékkel tudod a kitöltési tényezőt meghatározni, ez már 6 bit.
A hozzászólás módosítva: Júl 15, 2018
(#) krauszkrisztian14 hozzászólása Júl 15, 2018 /
 
A shift regiszteres problémám még mindig fent áll.
(#) sargarigo válasza krauszkrisztian14 hozzászólására (») Júl 15, 2018 /
 
Nem értem mit szeretnél még.. Kapu48 megmutatta (magyarul!), hogy hogy működik a shiftOut(), ezt kérted. Én elmagyaráztam neked hogy működik a shift regiszter.
Itt van még egy példakód, hátha ez segít. Itt a numberToDisplay helyére beírhatsz akármit, azt fogod látni a ledjeiden.

  1. //**************************************************************//
  2. //  Name    : shiftOutCode, Hello World                                
  3. //  Author  : Carlyn Maw,Tom Igoe, David A. Mellis
  4. //  Date    : 25 Oct, 2006    
  5. //  Modified: 23 Mar 2010                                
  6. //  Version : 2.0                                            
  7. //  Notes   : Code for using a 74HC595 Shift Register           //
  8. //          : to count from 0 to 255                          
  9. //****************************************************************
  10.  
  11. //Pin connected to ST_CP of 74HC595
  12. int latchPin = 8;
  13. //Pin connected to SH_CP of 74HC595
  14. int clockPin = 12;
  15. ////Pin connected to DS of 74HC595
  16. int dataPin = 11;
  17.  
  18.  
  19.  
  20. void setup() {
  21.   //set pins to output so you can control the shift register
  22.   pinMode(latchPin, OUTPUT);
  23.   pinMode(clockPin, OUTPUT);
  24.   pinMode(dataPin, OUTPUT);
  25. }
  26.  
  27. void loop() {
  28.   // count from 0 to 255 and display the number
  29.   // on the LEDs
  30.   for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
  31.     // take the latchPin low so
  32.     // the LEDs don't change while you're sending in bits:
  33.     digitalWrite(latchPin, LOW);
  34.     // shift out the bits:
  35.     shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay);  
  36.  
  37.     //take the latch pin high so the LEDs will light up:
  38.     digitalWrite(latchPin, HIGH);
  39.     // pause before next value:
  40.     delay(500);
  41.   }
  42. }


Ha még most sem jó, akkor légyszíves írd le egyértelműen hogy mire vágysz!
(#) devilke3000 hozzászólása Júl 15, 2018 /
 
Valaki tudna segiteni ezt mivel lehet leforditani filmware állományra lenne szükségem!
heatgun
(#) krauszkrisztian14 válasza sargarigo hozzászólására (») Júl 15, 2018 /
 
Azt nem értem, hogy hogyan lehetne egyszerre több kimenetet felkapcsolni. Pl a 2-es lábat és a 7-eset, egy másodperc múlva meg a 4-es lábat és a 6-osat felkapcsolni.
(#) tbarath válasza Kovidivi hozzászólására (») Júl 16, 2018 /
 
Nem, 10 kHz nagyságrendben szeretnék PWM jelet, minél nagyobbat (annyival egyszerűbb lenne utána az RC halom), 10 kHz már elég is lenne. Az értem én, hogy 1 MHz/256 = 4 kHz, de én PWM frekvenciaként egy teljes periódus hosszát értem (vagyis 1/x, érted), és nem 1/256 hosszt - aztán lehet hogy én vettem be fordítva a gyógyszert.

A datasheet amúgy ezt írja:
Idézet:
„The Timer/Counter1 features a high resolution and a high accuracy usage with the lower prescaling opportunities. It can also support two accurate, high speed, 8-bit Pulse Width Modulators using clock speeds up to 64 MHz (or 32 MHz in Low Speed Mode). In this mode, Timer/Counter1 and the output compare registers serve as dual standalone PWMs with non-overlapping non-inverted and inverted outputs.”

Ez ugye 64x vagy 32x nagyobb, mint az 1 MHz-es órajelem, és én már a 3x-ostól is nagyon boldog tudnék lenni. Tuti én cseszek el valamit valahol, de nem látom hogy hol. Illetve látom, nyilván valamit kihagyok vagy rosszul csinálok, de ötletem sincs.

Esetleg az lehet probléma, hogy analogwrite-tal írok ki valamit bitpiszkálás helyett?
Bár alapban ez a kimenet 2 kHz volt, a setup utolsó 3 sorával sikerült 4 kHz-re növelnem, a többi ugyanaz mindenhol, szóval ez cáfolná ezt az elméletet...
(#) vargham válasza tbarath hozzászólására (») Júl 16, 2018 /
 
Idézet:
„Esetleg az lehet probléma, hogy analogwrite-tal írok ki valamit bitpiszkálás helyett?”

Mondjam azt, hogy igen? Pont az Arduino topikban írjam le, hogy nem érdemes Arduinot használni, mert lassú és korlátozott?

Nem pont PWM, de jól rávilágít az Arduino keretrendszer lassúságára:
https://gist.github.com/vargham/fda52a17ab4001f50aec245615713cf8
(#) icserny válasza devilke3000 hozzászólására (») Júl 16, 2018 /
 
Ezt az ARM - Miértek, hogyanok c. topikban kellene megkérdezni!

Itt egy másik projekt leírása a fíckónak, s valószínőleg az első bekezdésben megnevezetett fejlesztőszoftvereket használta az általad kinézett projekthez is.
A hozzászólás módosítva: Júl 16, 2018
(#) kapu48 válasza vargham hozzászólására (») Júl 16, 2018 /
 
Ezt nem igazán értem!
Mi köze van a HW TIMER1 működési sebességéhez, hogy milyen IDEn készült a project?

Ez csupán az MCU órajelén, a Prescaler, és a OCR1C regiszterek beállításán mulhat.
(#) vargham válasza kapu48 hozzászólására (») Júl 16, 2018 /
 
Az IDE mindegy. De az Arduino nem csak IDE, hanem egy C és C++ keverékben megírt függvénykönyvtár is. Az AVR Libc-ben nincs se digitalWrite, se analogWrite, se hasonlók. Egyszer nézd meg ezeknek a forrását! A regiszerek piszkálásán kívül van bennük egy csomó felesleges és lassú utasítás is.
(#) kapu48 válasza vargham hozzászólására (») Júl 16, 2018 /
 
Ezekkel mind tisztában vagyok.

De a HW TIMER1 működési sebességét ezek nem befolyásolják!
Még az említet plusz megszakítások sem.
A hozzászólás módosítva: Júl 16, 2018
(#) berkesandor hozzászólása Júl 16, 2018 /
 
Digitális iránytűt használok, arduinoval.
Az lenne a célom, ha egy iránytű által mért irányszög (0 -360) megváltozik pl. 10 fokkal többel, akkor induljon be egy folyamat.
Ezzel nem is lenne gond, de hogy oldjam meg azt, hogy ha a alapállapot 353 fok, és felfelé megyünk 10 fokot, akkor 3 fokon fogok állni, és ez nem tartozik vele a 353 -+ 10 fokba ("matematikailag").
Van erre valami okos trükk?
(#) kapu48 válasza berkesandor hozzászólására (») Júl 16, 2018 /
 
Az említett összeadás példánál, ha az új érték kisebb, mint a régi?
Akkor átléptük a felső határt és a képlet: (360 – 353) + 3 = 10
Ebből következik, hogy kivonásnál az alsó határt figyeled, ha kisebb mint a régi: ?
A hozzászólás módosítva: Júl 16, 2018
(#) KoblogPerGyok válasza berkesandor hozzászólására (») Júl 16, 2018 /
 
Törölve.
A hozzászólás módosítva: Júl 16, 2018
(#) kapu48 válasza KoblogPerGyok hozzászólására (») Júl 16, 2018 /
 
Inkább:
3-353= -350, 360 - 350 = 10

Így is 2 műveletbe kerül, és nem is lehet unsigned int-en ábrázolni.
A hozzászólás módosítva: Júl 16, 2018
(#) kapu48 válasza kapu48 hozzászólására (») Júl 16, 2018 /
 
Sajnos a feladat még mindig nyitott!

példa 1:
Ki indulási érték nagyobb = 353
Új érték kisebb = 343
360 – 353 = 7
360 – 343 = 17
17 – 7 = 10 ez -10 lenne
vagy:
353 - 343 = 10 ez -10 lenne

példa 2:
Ki indulási érték nagyobb = 353
Új érték kisebb = 3
360 – 353 = 7
7 + 3 = 10 ez meg +10

De hogyan döntsük el, hogy melyik művelet sort használjuk???
A hozzászólás módosítva: Júl 16, 2018
(#) devilke3000 válasza icserny hozzászólására (») Júl 16, 2018 /
 
Ide kivül nem ismerek más környezetet amibe boldogulok is!
ARM tudásom totál 0000!
(#) berkesandor válasza kapu48 hozzászólására (») Júl 16, 2018 /
 
10-350 közti alapállapotnál nem gond a szelekció.
A maradék 20 estre, csak olyan megoldást találtam (a fejembe), hogy egyesével csinálok feltételt az alapszögekre.
pl.
  1. if (alapirany = 351 )
  2.                       if ( ujirany >  341 || ujirany = 0)      
  3.                           {      Serial.print("      Ujirany: ");
  4.                                   Serial.print(ujirany);
  5.                                   Serial.println ("  Jelez !"); }
  6.                      
  7.                        else { Serial.print("     Ujirany: ");
  8.                               Serial.print(ujirany);
  9.                               Serial.println ("  Nem jelez !"); }


Ez a szokásos favágó megoldás...
A hozzászólás módosítva: Júl 16, 2018
(#) kapu48 válasza berkesandor hozzászólására (») Júl 16, 2018 /
 
Javítsd ki:
  1. if (alapirany == 351 )
  2.                       if ( ujirany >  341 || ujirany == 0)
A hozzászólás módosítva: Júl 16, 2018
(#) berkesandor válasza kapu48 hozzászólására (») Júl 16, 2018 /
 
Kösz. Marad a favágás?
(#) kapu48 válasza berkesandor hozzászólására (») Júl 16, 2018 /
 
Ha megnézed a videót:
Bővebben: Link

Neki ís megbolomdúl a kijalzés, mikór átfordúl a 360 fokos határon.
(#) kissi válasza berkesandor hozzászólására (») Júl 16, 2018 /
 
Szia!

A változás irányát nem tudod figyelni ( egy változó jelezné, hogy a szögértékek nőnek vagy nem, balra vagy jobbra forog az iránytű!) ?!
(#) kistee válasza berkesandor hozzászólására (») Júl 16, 2018 /
 
Próbáld meg ezt:

A=a pillanatnyi irány (0-359)
B=a kívánt irány (0-359)

A trükk:
A-hoz adj hozzá egy fix konstanst (legyen pl. 400). Vond ki A-ból B-t és ha az eredmény nagyobb 400-nál, akkor jobbra kell helyesbíteni, ha kisebb 400-nál, akkor balra. Fontos, hogy többet adj hozzá, mint ahány részre a teljes kört felosztottad. Így sosem lesz negatív az eredmény.
A hozzászólás módosítva: Júl 16, 2018
(#) kapu48 válasza kistee hozzászólására (») Júl 16, 2018 /
 
Kezdő érték = 353
353 + 400 = 753
Új érték = 3
753 – 3 = 750 jobbra OK

Új érték = 343
753 – 343 = 410 Ez is jobbra KO?? Pedig 343 < 353 = balra

még mindig a határon a jobbra 10 fok, helyet balra 370 fokot fordúl.
Következő: »»   460 / 839
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