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   823 / 840
(#) vargham válasza tursaba hozzászólására (») Ápr 8, 2021 /
 
Sosem használtam ötöst, de szerintem mindegyik verzió működik elf és hex fájllal is. Ki kell próbálni.
(#) tursaba válasza vargham hozzászólására (») Ápr 8, 2021 /
 
A file kiválasztáskor csak az .elf jelenik meg, a .hex nem látható a listán, pedig az is le van fordítva.
(#) fecus hozzászólása Máj 3, 2021 /
 
Időnként használok kis arduino (főleg a minit) klónokat. Ha megtorpedózzák a kínai beszerzést az új vámolással, van tippetek itthon hol lehetne olcsón hozzájutni a panelekhez?
(#) vargham válasza fecus hozzászólására (») Máj 3, 2021 /
 
Szorozd meg az ÁFAval (1,27), és döntsd el, hogy megéri-e. Valószínűleg még így is olcsóbb lesz Kínából. A kérdés az, hogy mennyi lesz az ügyintézés díja. Ha nem egyesével rendeled, hanem többet egyszerre, akkor az is el fog oszlani a tételek között.
(#) lajos1969 hozzászólása Máj 31, 2021 /
 
Sziasztok!
Atmega8 Low meg a High fuse érdekelne?
Köszönöm!
A hozzászólás módosítva: Máj 31, 2021
(#) lajos1969 válasza lajos1969 hozzászólására (») Máj 31, 2021 /
 
IIyen formátumban.
Pl:
Low 0x E1
High 0x D9
(#) eyess válasza lajos1969 hozzászólására (») Jún 1, 2021 /
 
Ez felel meg az E1: D9 beállításnak , ami a belső 1Mhz es saját órajelét használja.
A hozzászólás módosítva: Jún 1, 2021

Atmerga 8.PNG
    
(#) lajos1969 válasza eyess hozzászólására (») Jún 1, 2021 /
 
Köszi azt tudom.
A képen látható az minek felel meg?
Köszi!
A hozzászólás módosítva: Jún 1, 2021
(#) mateatek válasza lajos1969 hozzászólására (») Jún 1, 2021 /
 
High = 0x56
Low = 0xC0
A hozzászólás módosítva: Jún 1, 2021
Moderátor által szerkesztve
(#) lajos1969 válasza mateatek hozzászólására (») Jún 1, 2021 /
 
Kösz majd kipróbálom!
(#) lajos1969 válasza mateatek hozzászólására (») Jún 1, 2021 /
 
Szia!
Kipróbáltam nem megy a progi benne, olyan mintha benne se lenne.
Csak azlcd alsó sora megy az 16 karakter telibe.?
(#) sitto hozzászólása Jún 26, 2021 /
 
Sziasztok!

Egy attiny85-re épülő NTC hőmérővel akadtam el.
A kód teljesen jól működik egy arduino nanoval.
Ahhoz, hogy működjon az attiny85-el is az lcd- vel kapcsolatos részleten változtattam csak.
Bekapcs. után mutatja is a hőmérsékleteket ahogy kell, de kb 32 foknál kiakad. Hiába melegítem az NTC-t nem megy feljebb a mért érték, majd egyszer csak reseteli magát.

  1. //library definition
  2. #include "TinyWireM.h"
  3. #include "Tiny4kOLED.h"
  4. #include "font16x32digits.h"
  5.  
  6.  
  7. // which analog pin to connect
  8. #define THERMISTORPIN A0
  9. #define UNITSELECTPIN  PB4
  10.  
  11. // resistance at 25 degrees C
  12. #define THERMISTORNOMINAL 100000    //10000 - 10k, 100000 - 100k NTC resistor
  13.  
  14. // temp. for nominal resistance (almost always 25 C)
  15. #define TEMPERATURENOMINAL 25
  16.  
  17. // how many samples to take and average, more takes longer but is more 'smooth'
  18. #define NUMSAMPLES 5
  19.  
  20. // The beta coefficient of the thermistor (usually 3000-4000)
  21. #define BCOEFFICIENT 3797
  22.  
  23. // the value of the 'other' resistor
  24. #define SERIESRESISTOR 100000     //10000 - 10k, 100000 - 100k resistor
  25.  
  26. int samples[NUMSAMPLES];
  27.  
  28. // measured min and max temperatures
  29. float minTemp = 999;
  30. float maxTemp = -999;
  31.  
  32. void setup(void) {
  33.  
  34. //oled initialization
  35.   oled.begin();
  36.   oled.setFont(FONT8X16);
  37.   oled.clear();
  38.   oled.on();
  39.  
  40. // units in initialization
  41.   digitalWrite (UNITSELECTPIN, HIGH);
  42.  
  43. }
  44.  
  45. void loop(void) {
  46.  
  47. //avarage calculation initialization
  48.   uint8_t i;
  49.   float average;
  50.  
  51.  
  52. // take N samples in a row, with a slight delay
  53.   for (i = 0; i < NUMSAMPLES; i++) {
  54.     samples[i] = analogRead(THERMISTORPIN);
  55.     delay(10);
  56.   }
  57.  
  58. // average all the samples out
  59.   average = 0;
  60.   for (i = 0; i < NUMSAMPLES; i++) {
  61.     average += samples[i];
  62.   }
  63.   average /= NUMSAMPLES;
  64.  
  65.   //Serial.print("Average analog reading ");
  66.   //Serial.println(average,0);
  67.  
  68. // convert the value to resistance
  69.   average = 1023 / average - 1;
  70.   average = SERIESRESISTOR / average;
  71.  
  72.   //Serial.print("Thermistor resistance ");
  73.   //Serial.println(average,0);
  74.  
  75. //calculation of measured temperature
  76.   float steinhart;
  77.   steinhart = average / THERMISTORNOMINAL;     // (R/Ro)
  78.   steinhart = log(steinhart);                  // ln(R/Ro)
  79.   steinhart /= BCOEFFICIENT;                   // 1/B * ln(R/Ro)
  80.   steinhart += 1.0 / (TEMPERATURENOMINAL + 273.15); // + (1/To)
  81.   steinhart = 1.0 / steinhart;                 // Invert
  82.  
  83.   if (digitalRead(UNITSELECTPIN) == HIGH) {
  84.     steinhart = steinhart - 273.15;              // convert absolute temp to C
  85.   }
  86.  
  87.   if (digitalRead(UNITSELECTPIN) == LOW) {
  88.     steinhart = (steinhart - 273.15) * 1.8 + 32; // convert absolute temp to F
  89.   }
  90.  
  91.  
  92. // store min and max values
  93.   if (steinhart < minTemp) {
  94.     minTemp = steinhart;
  95.   }
  96.  
  97.   if (steinhart > maxTemp) {
  98.     maxTemp = steinhart;
  99.   }
  100.  
  101. // display temperature results
  102.  
  103.   oled.setFont(FONT16X32DIGITS);
  104.   oled.setCursor(1, 8);
  105.   oled.print(steinhart, 0);
  106.   oled.setFont(FONT8X16);
  107.   oled.setCursor(90, 0);
  108.   oled.print(minTemp, 0);
  109.   oled.setCursor(90, 10);
  110.   oled.print(maxTemp, 0);
  111.  
  112.  delay(1000);  //refresh rate of the measurement
  113.  
  114. }
A hozzászólás módosítva: Jún 26, 2021

ntc.JPG
    
(#) Jonni válasza sitto hozzászólására (») Jún 26, 2021 /
 
Ez inkább az arduino forumba való.
De nekem gyanus , hogy a 29. 30. sorba a minuszjel nem stimmel (a maximum hogy lehet -999?) meg a 88. sorba a 32-est átirnám mondjuk 60-ra és úgy próbálnám ki.
(#) nedudgi válasza Jonni hozzászólására (») Jún 26, 2021 /
 
Az irreális érték a minimum és maximum figyelésének legfrappánsabb algoritmusához kell.
(#) sitto válasza Jonni hozzászólására (») Jún 26, 2021 /
 
Ami a 29. és 30. sort illeti azt már én is észre vettem, de az csak a min és max hőmérsékletek kiértékelését befolyásolja.
A 88.pedig csak akkor érdekes ha Celsius helyett Fahrenheit-ben akarom kiíratni.

Próbáltam már, hogy kitöröltem ezeket a sorokat de nem segít.
Nano-n pedig működik a kód.

Én inkább valami túlcsordulásra vagy lcd problémára gyanakszom.
De eddig nem jöttem rá.
(#) Jonni válasza sitto hozzászólására (») Jún 26, 2021 /
 
Az lcd nem lehet itt hibás. Ott amit kiküldessz az ki is megy.
(#) sitto hozzászólása Jún 26, 2021 /
 
Ha az lcd részt kiszedem és letöltöm nano-ra akkor teljesen jó.
Valamit az attiny85 kavar be
  1. //library definition
  2.  
  3.  
  4. // which analog pin to connect
  5. #define THERMISTORPIN A0
  6. #define UNITSELECTPIN  PB4
  7.  
  8. // resistance at 25 degrees C
  9. #define THERMISTORNOMINAL 100000    //10000 - 10k, 100000 - 100k NTC resistor
  10.  
  11. // temp. for nominal resistance (almost always 25 C)
  12. #define TEMPERATURENOMINAL 25
  13.  
  14. // how many samples to take and average, more takes longer but is more 'smooth'
  15. #define NUMSAMPLES 5
  16.  
  17. // The beta coefficient of the thermistor (usually 3000-4000)
  18. #define BCOEFFICIENT 3797
  19.  
  20. // the value of the 'other' resistor
  21. #define SERIESRESISTOR 100000     //10000 - 10k, 100000 - 100k resistor
  22.  
  23. int samples[NUMSAMPLES];
  24.  
  25. // measured min and max temperatures
  26. float minTemp = 999;
  27. float maxTemp = -999;
  28.  
  29. void setup(void) {
  30.  
  31. //oled initialization
  32.  
  33.   Serial.begin(9600);
  34.  
  35. // units in initialization
  36.   digitalWrite (UNITSELECTPIN, HIGH);
  37.  
  38. }
  39.  
  40. void loop(void) {
  41.  
  42. //avarage calculation initialization
  43.   uint8_t i;
  44.   float average;
  45.  
  46.  
  47. // take N samples in a row, with a slight delay
  48.   for (i = 0; i < NUMSAMPLES; i++) {
  49.     samples[i] = analogRead(THERMISTORPIN);
  50.     delay(10);
  51.   }
  52.  
  53. // average all the samples out
  54.   average = 0;
  55.   for (i = 0; i < NUMSAMPLES; i++) {
  56.     average += samples[i];
  57.   }
  58.   average /= NUMSAMPLES;
  59.  
  60.   Serial.print("Average analog reading ");
  61.   Serial.println(average,0);
  62.  
  63. // convert the value to resistance
  64.   average = 1023 / average - 1;
  65.   average = SERIESRESISTOR / average;
  66.  
  67.   Serial.print("Thermistor resistance ");
  68.   Serial.println(average,0);
  69.  
  70. //calculation of measured temperature
  71.   float steinhart;
  72.   steinhart = average / THERMISTORNOMINAL;     // (R/Ro)
  73.   steinhart = log(steinhart);                  // ln(R/Ro)
  74.   steinhart /= BCOEFFICIENT;                   // 1/B * ln(R/Ro)
  75.   steinhart += 1.0 / (TEMPERATURENOMINAL + 273.15); // + (1/To)
  76.   steinhart = 1.0 / steinhart;                 // Invert
  77.  
  78.   if (digitalRead(UNITSELECTPIN) == HIGH) {
  79.     steinhart = steinhart - 273.15;              // convert absolute temp to C
  80.   }
  81.  
  82.   if (digitalRead(UNITSELECTPIN) == LOW) {
  83.     steinhart = (steinhart - 273.15) * 1.8 + 32; // convert absolute temp to F
  84.   }
  85.  
  86.  
  87. // store min and max values
  88.   if (steinhart < minTemp) {
  89.     minTemp = steinhart;
  90.   }
  91.  
  92.   if (steinhart > maxTemp) {
  93.     maxTemp = steinhart;
  94.   }
  95.  
  96. // display temperature results
  97.   Serial.print("Temperature ");
  98.   Serial.print(steinhart,0);
  99.   Serial.println(" *C");
  100.   Serial.print("Mimimum temperature ");
  101.   Serial.print(minTemp,0);
  102.   Serial.println(" *C");
  103.   Serial.print("Maximum temperature ");
  104.   Serial.print(maxTemp,0);
  105.   Serial.println(" *C");
  106.  
  107.  delay(1000);  //refresh rate of the measurement
  108.  
  109. }
A hozzászólás módosítva: Jún 26, 2021

serial.JPG
    
(#) sitto válasza sitto hozzászólására (») Jún 26, 2021 /
 
Az A0 a reset pin is egyben.
A0 helyett A3-at haszálva működik.
(#) BeginnerKrisz hozzászólása Júl 1, 2021 /
 
Sziasztok!

Egy kis segítséget szeretnék kérni
Adott egy esp8266-os wifi modul egy D1-es kártyával. Fél napos szenvedés után sikerült a wifi beállításokat rápakolnom. Telefonon Blynk segédprogram üzemel. Van négy relém mind a négy be van kötve.

1- teljes kapu nyitás
2- csak az egyik kapu nyílik ki
3- garázskapu
4- világítás

Sikerült beállítanom elektronikai analfabéta révén, hogy egy gombot rendeltem a blynk nevű programhoz, majd kiválasztottam, hogy digitálisan melyik csatornán van a bekötés, illetve az ipulzus úgy lett beállítva, hogy 1-0. Így jól működik.

Rátérnék a probléma lényegére : imitáltam egy áramkimaradást és az eszköz újraindítását követően a garázskapu és a világítás elindul. Az érdekesség, hogy megnéztem a reléket és mind a négy világit áramszünet után, de csak két rész indul el.

Valakinek valami ötlete, hogy mit szúrtam el?
Hozzá teszem, hogy nem én alakítottam ki a rendszert és nincs is rálátásom. Mezei felhasználó vagyok
(#) pipi válasza BeginnerKrisz hozzászólására (») Júl 1, 2021 /
 
Nem biztos hogy te szúrtad el....
Bizonyos gpio lábakat az esp megrángat, vagy magas/alacsony állapotba kapcsol induláskor/bootoláskor, próbálj másik gpio lábat a kérdéses helyeken.
Itt van egy táblázat, hátha segít
https://randomnerdtutorials.com/esp8266-pinout-reference-gpios/
(#) BeginnerKrisz válasza pipi hozzászólására (») Júl 2, 2021 /
 
Köszönöm megnézem!
(#) Vacok hozzászólása Júl 5, 2021 /
 
Sziasztok!
Egy AVR-es kapcsolással van egy kis problémám. A kapcsolás egy önmegtartó tápellátással rendelkezik. A ki/be kapcsolás egy nyomógombbal valósul meg. A mechanizmus röviden annyi, hogy, ha L szintre húzom az X15 kivezetést, akkor a T2 kinyit és áram alá helyezi az atmega3287-at. Ezután már az atmega PD2 kivezetésén megjelenő H szint nyitja a T3 tranzisztort, ami továbbra is nyitva tartja a T2-t, így áram alatt marad az atmega. A kikapcsolás kétféleképpen történhet: vagy az atmega PD2 lába kerül L szintre, ami zárja a T3 tranzisztort, ezután az R3 zárja a T2 MOSFET-et, így a kapcsolás működése leáll, vagy a nyomódomb megnyomását az atmega a PB2 lábon érzékeli. Ekkor a PD2 L szintre kerül, de egészen addig áram alatt marad az atmega, amíg a nyomógombot fel nem engedjük. Ezután az előbb leírt forgatókönyv lép életbe.
A problémám az, hogy pár hónap működés után a T2 zárlatba ment. Ez idő alatt többet volt kikapcsolva, mint üzemben, de az elem folyamatosan benne volt, így a T2 D-S feszültsége hosszasan 3V környékén volt. Hibáztam volna a tervezés során?
(#) csatti2 válasza Vacok hozzászólására (») Júl 5, 2021 /
 
Én mindenképp betennék egy áramkorlátozó ellenállást a mosfet gate-jére. Ugyan nagyon rövid időre, de kialakulhat egy viszonylag nagy áram a gate kapacitásának kisütésekor és ezt nem szeretik a mosfetek.
Az R4 ellenállásnak mi a szerepe?
Az R3 ellenállás lehet jóval nagyobb is és akkor az R5 szintén.
Külső áramforrásra csatlakozhat valahol az áramkör?
Miért hiányoznak a kondik a mikrokontroller tápjairól?
(#) Vacok válasza csatti2 hozzászólására (») Júl 6, 2021 /
 
Szia! Köszi a tippet.
Kúlső áramforráshoz nem tud csatlakozni, csak elemről működik. E miatt is spóroltam le a kondikat az amega tápjáról, azaz jobban mondva elko nincs, egy 100nF kerámia kondi a valóságban van, az sajnos nem került fel a rajzra. Az R4-et azért tettem bele, hogy, amikor kikapcsol az mikro vezérlő, akkor a tranzisztor bázisa ne maradjon “lógva”, hanem az R4 lehúzza testre és zárva tartja.
(#) csatti2 válasza Vacok hozzászólására (») Júl 8, 2021 /
 
A bipoláris tranzisztort a bázisán átfolyó áram nyitja ki, azaz nem marad lógva. A mosfeteknél lehet ez probléma, mert ott a potenciálkülönbség nyit és a kapunak saját kapacitása van, amit ki kell sütni, hogy lekapcsoljon.

A 100nF-os kondikat elem esetén se spórold le, illetve kapjon minden egyes betáp sajátot (az analóg táp is). Az ő feladatuk elsősorban nem a mikrokontroller védelme (bár abban is segítenek), hanem az áramkör többi részének a zavarvédelme (illetve az EMC, de ez hobbielektronikánál nem érdekes).
(#) Szárnyas válasza csatti2 hozzászólására (») Júl 8, 2021 /
 
Proli007 magyarázata szerint van jelentősége az itt R4-gyel jelölt bázis-emitter ellenállásnak. Bővebben: Link, Bővebben: Link
A hozzászólás módosítva: Júl 8, 2021
(#) csatti2 válasza Szárnyas hozzászólására (») Júl 8, 2021 / 1
 
Az R4-el éppen felerősíted azt, amit el szeretnél kerülni. Normál használatban pedig csak pocsékolod rajta az energiát.
Az R4-en keresztül direkt útja van a szivárgó áramnak a föld felé. R4 nélkül azonban egy nagy impedanciás út felé tud(na) csak szivárogni.
(#) fecus hozzászólása Júl 9, 2021 /
 
Nem biztos, hogy idevaló, de majd irányítsatok át!
MySensors eszközöket használok 868MHz-en. Kínai Arduino nano+rádiós modul (RFM69W).
Szükségem lenne egy távvezérlő házra ami kissé vízálló, kicsi és legalább 4 nyomógombja van. Bele kellene férni az aksi+nano+rádiós modulnak.
Merre keresgéljek?
(#) TavIR-AVR válasza fecus hozzászólására (») Júl 10, 2021 /
 
Külön műszerdoboz (vagy villanyászdoboz) és IP védelemmel (vízálló IP54 vagy felette) -> https://hu.wikipedia.org/wiki/IP-v%C3%A9detts%C3%A9g
és erre vízálló nyomógombokat raksz....
(#) fecus válasza TavIR-AVR hozzászólására (») Júl 11, 2021 /
 
Azt nem írtam, hogy hordozni kellene. Mint egy kapunyitó vagy TV távirányító. Bocs.
Következő: »»   823 / 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