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   839 / 839
(#) KoblogPerGyok válasza Skori hozzászólására (») Ápr 8, 2024 /
 
Szia!

Kicsit utána néztem, de nem vágom ezt sajnos, de te az ARM STM32F103C8T6- vagy ehhez hasonló gépet szeretnéd beállítani úgy, hogy neked az SWD frekvenciája alacsonyabb legyen?

Amit találtam, az csak az AHB1/2 regiszter, (óra prescale ha jól látom) állítgatásával mondott valamit, de nem tudom megerősíteni neked sajnos, hogy ez jó tipp, vagy sem.

Regiszterek/bitek, amik segíthetnek:

RCC_AHB1ENR
RCC_AHB1RSTR
DBGMCU_APB1_FZ
DBGMCU_APB2_FZ

Nem biztos, hogy ehhez való Manual, csak pár percem volt keresni:

MANUAL


A dsPIC-tapasztalataimra építek, ott mélyültem bele regiszter szinten mindenbe. Ott a részletes leírás majdnem mindenre megadta a választ.

Hátha elegendő csak az óra freki csökkentése, majd utána visszaállítása, meg reset-elni mindent utána.

De nem értek ehhez, lehet teljesen blődség mindez, akkor bocsánat, csak segíteni próbálok.
(#) vargham válasza KoblogPerGyok hozzászólására (») Ápr 8, 2024 / 1
 
Ez más.
Az SWD frekvencia az a debugger kapcsolat frekvenciája, és a hoston kell állítani.
(#) Skori válasza vargham hozzászólására (») Ápr 8, 2024 /
 
Így van, feltételezem, hogy külső programot hív meg az arduino, és lehet, hogy ennek kellene valahogyan további paraméterként megadni az SWD frekvenciát is. Egyelőre "kerülő úton" oldottam meg a problémát, de attól még a későbbiekben hasznos lehetne ez az infó.
A hozzászólás módosítva: Ápr 8, 2024
(#) KoblogPerGyok válasza vargham hozzászólására (») Ápr 8, 2024 /
 
Igen, sejtettem, hogy ez más lesz, de gondoltam hátha. Sajnálom....
Bocs.
(#) vargham válasza Skori hozzászólására (») Ápr 9, 2024 /
 
Igen, külső programot hív meg.
GUI nincs a paraméterek beállításához. Valamelyik konfigurációs fájlt kell átírni az adott core-ban.
(#) szikorapéter hozzászólása Vas, 20:39 /
 
Sziasztok.
ESP8266 a vezérlőm, a kód egy lakásvezérlő program, most a html eléggé összedobott de nem az a fő gond.
A hiba ott kezdődik hogy a weboldalon a gomb megnyomásakor nem "zöldül" ki a gomb, és a vezérlő sem vált kimeneti állapotot, de nem jövök rá miért, lassan 3 napja ülök felette pedig biztos hogy bagatel a probléma....
Elvileg dinamikusan kéne frissítenie, így ha állapotváltozást észlel az regisztrálja a tárolóban így megmarad a megváltozott kimeneti állapot így mind a html-ben megadott "változás" végbemegy, megy a vezérlő állapotot vált az ahhoz társított lábon.
Jelenleg 3db dallas ic-ből olvas ki hőmérséklet adatot és kapcsol egymástól függetlenül 6db SSR-t, ez volna a feladat internetes elérésen keresztül.

A segítséget előre is köszönöm!

  1. #include <ESP8266WiFi.h>
  2. #include <WiFiClient.h>
  3. #include <ESP8266WebServer.h>
  4. #include <OneWire.h>
  5. #include <DallasTemperature.h>
  6.  
  7. // WiFi beállítások
  8. const char* ssid = "xxxxxxx";
  9. const char* password = "xxxxxx";
  10.  
  11. // DS18B20 szenzorok csatlakozásai
  12. const int sensorPin1 = D6;
  13. const int sensorPin2 = D7;
  14. const int sensorPin3 = D8;
  15.  
  16. OneWire oneWire1(sensorPin1);
  17. OneWire oneWire2(sensorPin2);
  18. OneWire oneWire3(sensorPin3);
  19.  
  20. DallasTemperature sensors1(&oneWire1);
  21. DallasTemperature sensors2(&oneWire2);
  22. DallasTemperature sensors3(&oneWire3);
  23.  
  24. // Kapcsolók és kimenetek beállítása
  25. const int switchPins[6] = {D0, D1, D2, D3, D4, D5};
  26. const int numSwitches = sizeof(switchPins) / sizeof(switchPins[0]);
  27.  
  28. bool switchStates[] = {false, false, false, false, false, false};
  29.  
  30. ESP8266WebServer server(80); // Web szerver inicializálása port 80-on
  31.  
  32. void setup() {
  33.   Serial.begin(115200);
  34.   delay(10);
  35.  
  36.   // WiFi csatlakozás
  37.   Serial.println();
  38.   Serial.println();
  39.   Serial.print("Csatlakozás a ");
  40.   Serial.println(ssid);
  41.  
  42.   WiFi.begin(ssid, password);
  43.  
  44.   while (WiFi.status() != WL_CONNECTED) {
  45.     delay(500);
  46.     Serial.print(".");
  47.   }
  48.  
  49.   Serial.println("");
  50.   Serial.println("WiFi kapcsolódva");
  51.   Serial.println("IP cím: ");
  52.   Serial.println(WiFi.localIP());
  53.  
  54.   // Kapcsolók inicializálása
  55.   for (int i = 0; i < numSwitches; i++) {
  56.     pinMode(switchPins[i], OUTPUT);
  57.     digitalWrite(switchPins[i], LOW); // Alapállapot: alacsony szint
  58.   }
  59.  
  60.   // Hőmérsékletérzékelők inicializálása
  61.   sensors1.begin();
  62.   sensors2.begin();
  63.   sensors3.begin();
  64.  
  65.   // Web szerver kezelő függvények
  66.   server.on("/", handleRoot);
  67.   server.on("/switch", handleSwitch); // Új útvonal a kapcsolók kezeléséhez
  68.   server.begin();
  69. }
  70.  
  71. void loop() {
  72.   server.handleClient(); // Web szerver kiszolgálása
  73. }
  74.  
  75. void handleRoot() {
  76.   // Weboldal tartalma
  77.   String html = "<html><head><title>ESP8266 Webes Kapcsolók és Hőmérsékletek</title>";
  78.   html += "<style>body { background-color: black; color: white; font-size: 18px; text-align: center; }";
  79.   html += ".btn-on { background-color: green; color: black; }";
  80.   html += ".btn-off { background-color: red; color: black; }";
  81.   html += ".sensor-data { color: white; }</style>";
  82.   html += "</head><body>";
  83.   html += "<h1>ESP8266 Webes Kapcsolók és Hőmérsékletek</h1>";
  84.   html += "<h2 class=\"sensor-data\">Hőmérsékletek:</h2>";
  85.   html += "<div class=\"sensor-data\">"; // Szenzorok állapotvisszajelző szövegmező
  86.   html += "Szenzor 1: " + String(getTemperature(sensors1)) + " °C<br>";
  87.   html += "Szenzor 2: " + String(getTemperature(sensors2)) + " °C<br>";
  88.   html += "Szenzor 3: " + String(getTemperature(sensors3)) + " °C<br>";
  89.   html += "</div>";
  90.   html += "<h2>Kapcsolók:</h2>";
  91.  
  92.   for (int i = 0; i < numSwitches; i++) {
  93.     html += "<a href=\"/?switch=" + String(i) + "\"><button class=\"";
  94.     html += (switchStates[i] ? "btn-on" : "btn-off");
  95.     html += "\">";
  96.     html += (switchStates[i] ? "Bekapcsolva" : "Kikapcsolva");
  97.     html += "</button></a><br>";
  98.   }
  99.  
  100.   html += "</body></html>";
  101.  
  102.   server.send(200, "text/html", html);
  103. }
  104.  
  105. float getTemperature(DallasTemperature sensors) {
  106.   return sensors.getTempCByIndex(0);
  107. }
  108.  
  109. void toggleSwitch(int switchIndex) {
  110.   switchStates[switchIndex] = !switchStates[switchIndex];
  111.   digitalWrite(switchPins[switchIndex], switchStates[switchIndex] ? HIGH : LOW);
  112. }
  113.  
  114. void handleSwitchToggle(int switchIndex) {
  115.   toggleSwitch(switchIndex);
  116.   server.sendHeader("Location", "/");
  117.   server.send(303);
  118. }
  119.  
  120. void handleSwitch() {
  121.   if (server.hasArg("switch")) {
  122.     int switchIndex = server.arg("switch").toInt();
  123.     if (switchIndex >= 0 && switchIndex < numSwitches) {
  124.       handleSwitchToggle(switchIndex);
  125.     }
  126.   }
  127. }
A hozzászólás módosítva: Vas, 20:40
(#) cua válasza szikorapéter hozzászólására (») Vas, 22:45 / 1
 
Ez a <valamilyen cim>/switch utvonalon varja a beerkezo kereseket.
  1. server.on("/switch", handleSwitch);

Ez pedig:
  1. html += "<a href=\"/?switch=" + String(i) + "\"><button class=\"";

A <valamilyen cim>/ utvonalon kuld egy switch valtozot

Probald igy:
  1. html += "<a href=\"/switch/?switch=" + String(i) + "\"><button class=\"";
(#) szikorapéter válasza cua hozzászólására (») Vas, 23:33 / 1
 
Végül sikerült köszönöm a segítséget.

A sor amit javasoltál nem teljesen lett jó, panaszkodott a html kód hogy nem találja a /switch/ -t , ott rájöttem hogy egy /-el több van neki, levettem és fut szépen a kód hibamentesen.

Köszönöm még egyszer!
(#) cua válasza szikorapéter hozzászólására (») Vas, 23:38 /
 
Inkabb csak az elv volt erdekes, hogy hogyan mukodik
(#) nickname hozzászólása Hé, 14:24 /
 
Sziasztok!

Két MOSFET-et szeretnék vezérelni, úgy hogy a kapcsoló négyszögjel frekvenciája tökéletesen megegyezik, viszont időbeni eltolás van a két jel között. Az időbeni eltolást változtatni kellene tudni oda-vissza a lehető legkisebb léptékben. Csatoltam egy képet mire is gondolok.
Kérdésem, hogy ez megvalósítható-e Arduino-val, vagy esetleg van rá egyéb egyszerű megoldás?

Előre is köszi a segítséget.
(#) dB_Thunder válasza nickname hozzászólására (») Hé, 15:01 /
 
Idézet:
„esetleg van rá egyéb egyszerű megoldás?

Hídkapcsolású D osztályú erősítő??
(#) mateatek válasza nickname hozzászólására (») Hé, 15:48 /
 
Van rá lehetőség. Beállítod mondjuk azonos frekire a 2-es, 8 bites timert és az 1-es, 16 bitest. A 16 bites timer beállítását a lehető legnagyobb felbontásúra csinálod és a TCNT1 regiszterrel tologatod a fázisát. Példa 10 kHz-re:

  1. int setfazis = 200; //max ICR1
  2.   TCCR1A = 0;
  3.   TCCR1B = 0;
  4.   TCCR2A = 0;
  5.   TCCR2B = 0;
  6.   TCCR1A = _BV(WGM11) | _BV(COM1A1);
  7.   TCCR1B = _BV(WGM13) | _BV(CS10) | _BV(WGM12);
  8.   TCNT1  = 0;
  9.   ICR1   = 1599;
  10.   OCR1A = 799;
  11.   TCNT1 = setfazis;
  12.   TCCR2A = _BV(WGM20) | _BV(COM2B1) | _BV(COM2B0) | _BV(WGM21);
  13.   TCCR2B = _BV(CS21) | _BV(WGM22);
  14.   OCR2A = 199;
  15.   OCR2B = 99;
  16.   TCNT2 = 0;


Ha nincsen nagy igény a fázistolás finomságára, akkor egy, 8 bites timerrel is meg lehet csinálni:
  1. int setfazis = 80; //max OCR2A
  2.   TCCR2A = 0;
  3.   TCCR2B = 0;
  4.   TCCR2A = _BV(WGM21) | _BV(COM2A0) | _BV(COM2B0);
  5.   TCCR2B = _BV(CS21);
  6.   OCR2A = 102;
  7.   OCR2B = setfazis;
  8.   TCNT2 = 0;


Ennek a kódnak az a hátránya, hogy a timer indulásakor a két jel fázisa egymáshoz képest pontosan indul, de az, hogy a két kimenet fel, vagy lefutó éllel indul, az véletlenszerű. Ezért indítás után rögtön le kell olvasni a két kimeneti port állapotát és ha jó, akkor csak menjen, ha nem jó, akkor újraindít. Van, hogy rögtön jól indul, van, hogy 30-40 újraindításnál lesznek megfelelőek a szintek.
(#) Bakman válasza nickname hozzászólására (») Hé, 16:13 /
 
Nem írtad, mekkora PWM frekvenciáról van szó. PCA9685-tel (12 bites felbontású PWM IC), viszonylag alacsony frekvencián megoldható igaz, kissé ágyúval verébre, lévén 16 kimenete van. A kimenetek frekvenciája egyezik, nem is lehet eltérő értékeket megdani, csak egy frekvenciát ismer az összes. Ha jól emlékszem, olyan 25 Hz-től 1500 Hz-ig megy a dolog.

Esetleg, ha nem túl nagy PWM frekvencia kell és belefér a CPU időbe, szoftverből megoldani az egészet.
(#) asch válasza nickname hozzászólására (») Hé, 16:49 / 1
 
Kellene tudni azt is, hogy mekkora a cél-frekvencia és a kitöltési tényező (az ábra 50%-ot sugall, de tényleg annyi-e, és kell-e változatani)?

AMEGA328p esetén van olyan megoldás, hogy a számlálót úgy konfigurálod, hogy OCR1A, OCR1B egyezésnél átállítsa a kimenetet, és triggereljen interruptot (ISR(TIMER1_COMPA_vect), ISR(TIMER1_COMPB_vect)). Az interruptból pedig be lehet állítani a következő jelváltás irányát és időpontját.
Ha az IRQ futása belefér két jelváltás között, akkor ezzel a módszerrel tetszőleges jelformát ki lehet adni, az általad leírtat is.

Azt is meg lehet csinálni, hogy két különböző számlálóra állítasz be 1-1 PWM-et, és a számlálóikat úgy indítod el, hogy eltérő fázisban legyenek. Ha három dologra figyelsz, akkor reprodukálhatóan helyesen tudod állítani a fázist:

* Akkor állítsd a számláló értékét, amikor szabályos abban az értelemben, hogy nem ugrasz át eseményt.
* Az egyikből kiolvasod a számláló értéket, számolod az új értéket, és azt beállítod a másik számlálónak.
* Mindezt IRQ kizárt blokkban csinálod: ekkor mindig ugyanannyi lesz a végrehajtás ideje. Ezt vagy méred, vagy az ASM alapján számolhatod is, és ezzel az értékkel korrigálhatod, hogy mennyit adsz hozzá. De ha sima összeadással csinálod, akkor néhány órajel lesz összesen, ami 1 mikroszekundum körülre jön ki, az is lehet, hogy elhanyagolható.

Szerk.: Amit írsz úgy hangzik mintha "dead time" generátorról lenne szó, aminek az a célja, hogy H-híd esetén ne nyissuk szembe a két FET-et, ami rövidzárat jelentene. Vannak csipek, amik beípítetten tudnak dead time-ot generálni a PWM kimenethez, érdemes megfontolni, hogy olyat használj, ami eleve tudja ezt. Pl. az ATtiny1614 az adatlap szerint tudja. Ez egy újabb családba tartozik amit kicsit másképpen kell programozni.
A hozzászólás módosítva: Hé, 16:55
(#) nickname válasza asch hozzászólására (») Kedd, 11:50 /
 
Sziasztok!

Köszi mindeninek a hozzászólást.
10Hz - 3KHz közötti tartományra van szükség, kitöltési tényező 10-50% között gyakorlatilag bármi jó.
Arduino-val ígéretesnek tűnik.
Mivel kezdő vagyok ezen a téren, melyiket javasolnátok erre a célra?
(#) Massawa válasza nickname hozzászólására (») Kedd, 11:58 /
 
Én is valami hasonlon dolgozok.
Elvben nekem külön megy a negativ meg a pozitiv jel ( a hid miatt) alapbol egyforma frekin, de bizonyos feltételek mellett DC tartalmat kell elöállitani azaz a pozitiv meg a negativ impulzusok szélességét kell arányosan változtatni ( azaz amivel szélesebb a pozitiv annyival keskenyebb a negativ.
Alapbol semmi gond az egésszel, csak idözités kérdése ( nekem meg az alapfrekit is be kell tartani,
Azaz 3 idöparameter van:
a pozitiv,
a negativ idö meg
a maradék idö a periodus végéig.
A DC eltolás egy delta ami a pozitiv impulzust hosszabbitja ( szorozza) a negativat (osztja) meg szükiti.
A hozzászólás módosítva: Kedd, 12:00
(#) mateatek válasza nickname hozzászólására (») Kedd, 12:17 /
 
Az Ardu ezeket a kritériumokat megcsinálja a timerek segítségével. A timer konfigurálása után a teljes számítási kapacitás rendelkezésedre áll, tehát az alap feladaton kívül még sok mást is csinálhat mellette.
(#) KoblogPerGyok válasza nickname hozzászólására (») Kedd, 20:20 /
 
Azt meg szabad kérdezi mit hajt meg pontosan ez?
(#) oriza hozzászólása Sze, 9:43 /
 
Sziasztok!
Kezdő vagyok, a felprogramozott Arduino Uno-ból, hogy lehet kiolvasni, elmenteni az éppen rá töltött programot?
(#) Bakman válasza oriza hozzászólására (») Sze, 9:59 /
 
Itt van egy leírás: Bővebben: Link. A végén kapni fogsz egy hex fájlt, amivel kb. semmire sem mész.
(#) benjami válasza oriza hozzászólására (») Sze, 10:18 /
 
Hex fájlba ilyen módon tudod kiolvasni a tartalmat.
(#) solti_imre hozzászólása Csü, 14:00 /
 
Sziasztok!

Vettem 2 db ilyen 40x4 karakteres kijelzőt. Van valamilyen megoldás arra, hogy I2C LCD Display modult használhassak hozzá? (Ilyenről lenne szó) Köszönöm előre is, ha valakinek van ötlete!
(#) solti_imre válasza solti_imre hozzászólására (») Csü, 14:14 /
 
(Odáig eljutottam, hogy a 40x4 -es 2 db 40x2-esként kezelendő - az elv tiszta is, de hogyan lehetne ezt a gyakorlatban kivitelezni?)
A hozzászólás módosítva: Csü, 14:15
(#) GPeti1977 válasza solti_imre hozzászólására (») Csü, 14:20 /
 
(#) solti_imre válasza GPeti1977 hozzászólására (») Csü, 14:36 /
 
Köszönöm, ezt néztem, de sajnos nem felel meg, mivel Mobiflight-hoz szeretném használni, tehát arra lennék kíváncsi, hogyan lehet két I2C eszközt (természetesen különböző címekre beállítva) fizikailag csatlakoztatni egy 40x4-es modulhoz? Megoldható, hogy mindkét I2C összes kimenete (az enable-t kivéve) közösítve, majd megy az ERM-re, az egyik I2C enable kimenete az E1-re, a másiké az E2-re? Nem vágják az I2C kimenetei egymást haza? Tri-state kimenetük van?
A hozzászólás módosítva: Csü, 14:37
(#) GPeti1977 válasza solti_imre hozzászólására (») Csü, 15:20 /
 
A PCA7584 kimenete csak L szintre tud lehúzni nagy árammal, H szintre kapcsolható felhúzó ellenállás van, a kijelző lábai is ilyenek, így lehet közösíteni.
(#) solti_imre válasza GPeti1977 hozzászólására (») Csü, 15:31 /
 
Nagyon köszönöm!!! Holnap ki is próbálom!
Következő: »»   839 / 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