Jsem šťastným majitelem kytarového komba ENGL THUNDER 50.
Po krátkém seznámení mi začalo vadit, že od půlky společního Gainu je Clean kanál nakreslený.
Zároveň jsem chtěl aby Lead kanál měl dostatečné zkreslení.
Přidal jsem tedy paralelně odpor 4K7 ke stávajícím u odporu 39k, tím, jsem snížil celkové zesilení a zvuk je mnohem vyváženější,
Vypadá to jako dramatické zeslabení signálu, ale s výsledkem jsem spokojený a a Lead volume mmám na půlce, nikoliv na konci.
Potřeboval jsem udělat jednoduché menu pro Dinduino a během hledání jsem narazil na knihovnu MENUSYSTEM z webové stránky : github.com/jonblack/arduino-menusystem
Nejen, že má jednoduché vytváření menu pomocí pár příkazů, ale hlavně jako jedna z mála knihoven umí periodicky zobrazit menu. To je důležité pro zobrazení aktuálních dat (čas, teplota, ...).
Tady je příklad je jednoduchého menu s podrobnějšícm komentářem:
#include <MenuSystem.h> // promenne pro menu MenuSystem ms; // instance objektu ms Menu mm(""); // nazev menu (root) MenuItem mm_mi1("Item 1"); // 1.polozka MenuItem mm_mi2("Item 2"); // 2.polozka MenuItem mm_mi3("Item 3"); // 3.polozka // nastavene funkce pro vyber polozky // nutne nasatvit pred udani struktury menu //----------------------------------------- // co se provede pri vyberu 1. polozky void on_item1_selected(MenuItem* p_menu_item) { Serial.println("Item1 Selected"); } // co se provede pri vyberu 2. polozky void on_item2_selected(MenuItem* p_menu_item) { Serial.println("Item2 Selected"); } // co se provede pri vyberu 3. polozky void on_item3_selected(MenuItem* p_menu_item) { Serial.println("Item3 Selected"); } // uvodni nastaveni void setup() { Serial.begin(9600); // nastaveni struktury menu // add.item pridava dalsi polozku do menu (nazev polozky menu, & + jmeno volane funkce pri vyberu) mm.add_item(&mm_mi1, &on_item1_selected); mm.add_item(&mm_mi2, &on_item2_selected); mm.add_item(&mm_mi3, &on_item3_selected); ms.set_root_menu(&mm); // zobraz napovedu help(); } // nekonecna smycka programu void loop() { // volani funkce pro pohyb v menu ovladani(); // zobrazeni menu Menu const* cp_menu = ms.get_current_menu(); Serial.println("----------------"); Serial.println(cp_menu->get_selected()->get_name()); Serial.println("----------------"); Serial.println(""); // Wait for two seconds so the output is viewable delay(2000); } void ovladani() { // resi pohyb po menu // aktualne z prikazoveho radku if (Serial.available()) { byte read = Serial.read(); switch (read) { case 'w': ms.prev(); break; // nahoru case 's': ms.next(); break; // dolu case 'a': ms.back(); break; // zpet - nepouzito case 'd': ms.select(); break; // vyber - nepouzito case 'h': help(); break; // napoveda } } } void help() { Serial.println("*"); Serial.println("* w - nahoru *"); Serial.println("* s - dolu *"); Serial.println("* a - zpet *"); Serial.println("* d - vyber *"); Serial.println("* h - napoveda *"); Serial.println("*"); } |
A jakpak tomu vdechnout život?
Použil jsem tady programování přes SPI/ISP/ICSP. Podrobnější popis tohoto řešní je zde:
arduino.cc/en/Tutorial/ArduinoISP
Zapojení Arduina jako programatoru:
Ještě textově:
Arduino | DINDUINO |
POPIS |
10 | RST | RESET |
11 | MOSI | DATA |
12 | MISO | DATA |
13 | SCK | HODINY |
GND | GND | ZEM |
Mám navíc vypnutý automacký Reset (to standaradní Arduino neumí a musí se u něj dát kondenzátor 10-470u mezi Reset (+) a zem (-)).
Používám prostředí Arduino 1.01 a 1.05 a jako typ Arduina mám Arduino MINI /w Atmega 328.
Typ programatoru Arduino as ISP.
Nahrávám pomoci File > Upload Using Programmer .
První program : www.pise.cz/blog/ftp/posjirka/dinduino_6_2014_zakl.ino
Jak tedy na sestaveni?
Takhle vypadá návrh PCB a osazeni:
Jelikož jsem trochu limitovaný velikostí obrázků je vše ve velikosti formátu A5.
Tady máme PCB :
www.pise.cz/blog/ftp/posjirka/dinduino_6_2014_bott.pdf
a osazení součástek + čelni panel
www.pise.cz/blog/ftp/posjirka/dinduino_6_2014_souc.png
Začal jsem nejdřív panelem LCD:
- první na řadě jsou drátové propojky (je jich tady celkem 5 !!!)
- osadil jsem odpory (R1-R8) a odporovou síť (R10) , kterou jsem musel upravit protože nechi zbytečně ztrácet 5 mA tak jsem odstřihul 2. pin a taky 9. pin protože jsem sehnal pouze 8 odporovou síť
- potom kondenzátory (C1, C2) a krystal (Q1)
- další byly hřebínky pro LCD display (ty jsem posadil o 1 mm níž a po zapájení oddělal plastové držáky)
- hřebínky pro X1 (4. pin později odstranit, bude sloužit jako zámek konektoru)
- potom LED diody (LED1 - LED3)
- tlačítka (SW1 - SW4) - SW2/RESET je schválně nižší aby nedošlo k resetu.
- nakonec přijde Atmega 328 (bez patice přímo do PCB).
Po otestování funkce (nahráním prvního programu přes SPI/ISP ale o tom až později v oživování) jsem připájel ze strany spojů izolované drátky jako X2.
Je to sice trochu nešťastné řešení, ale nesehnal jsem dost dlouhý hřebínek.
Další na řadě je modul BASE:
- tady je to podobné, nejdřív drátová propojka, potom odpory (R11, R12) pak keramické kondenzátory
- další jsou svorkovnice a patice na pojistku
- stabilizátory a el. kondenzátory a nakonec trafo + propojky s LCD panelem.
Výsledek je asi takový (ještě nemám podsvícený LCD, správnou velikost dist. sloupků a trafo ma 3VA):
Ještě by to chtělo seznam součástek:
LCD1 | WH0802A1-YGH-ET | 2x8 zn | LCD | 1 |
LCD1 | XINYA BL820GD | zabrousit na 7mm | PATICE LCD | 1 |
LCD1 | XINYA S1G20 | 1x20 pin | PATICE PCB | 1 |
IO1 | ATMEGA328P-PU | PROCESOR | 1 | |
LED1 | LED 3MM RED 3000/30° | 3mm RED | CHYBA | 1 |
LED2 | LED 3MM YELLOW 5000/20° | 3mm YELLOW | RELE1 | 1 |
LED3 | LED 3MM YELLOW 5000/20° | 3mm YELLOW | RELE2 | 1 |
R1 | RR W1 33R | 33R | 1 | |
R2 | RR W1 10K | 10k | 1 | |
R3 | RR W1 470R | 470R | 1 | |
R4 | RR W1 470R | 470R | 1 | |
R5 | RR W1 470R | 470R | 1 | |
R6 | RR W1 10K | 10k | 1 | |
R7 | RR W1 10K | 10k | 1 | |
R8 | RR W1 10K | 10k | 1 | |
R10 | RR 8X4K7 2% | (8)7x4k7 | 1 | |
SW1 | TACTM-619P-F | MENU | 1 | |
SW2 | TC-0102-T-A00 | RESET | 1 | |
SW3 | TACTM-619P-F | PLUS | 1 | |
SW4 | TACTM-619P-F | MINUS | 1 | |
x2 | viz LCD1 | SPI | 1 | |
x1 | IZOLOVANÝ DRÁT | PROPOJ | 1 | |
C1 | CK 18p/50V | 18p | 1 | |
C2 | CK 18p/50V | 18p | 1 | |
Q1 | QM 16.000MHZ | 16MHz | KRYSTAL | 1 |
viz DPS BASE | 40x80mm | DPS | 1 | |
SKM3X16 | 3mm/16mm | ŠROUBY | 2 | |
SKM3K | 3mm | MATICE | 2 | |
Izolační podložka 7/3,2mm,tloušťka 1,5mm | 8mm/3mm | PODLOŽKY | 2 | |
KDR07 | pr.6/3mm, delka 7mm | DISTANČNÍ SLOUPEC | 2 | |
IZOLOVANÝ DRÁT | PROPOJ | 1 | ||
X10 | ARK705V 2P | 2P / 7,5mm | 230V | 1 |
X11 | ARK705V 2P | 2P / 7,5mm | RELE1 | 1 |
X12 | ARK705V 2P | 2P / 7,5mm | RELE2 | 1 |
X21 | ARK500/3EX | 3P / 5mm | 1 | |
X22 | ARK500/3EX | 3P / 5mm | 1 | |
X23 | ARK500/3EX | 3P / 5mm | 1 | |
X24 | ARK500/3EX | 3P / 5mm | 1 | |
X25 | ARK500/3EX | 3P / 5mm | 1 | |
FU1 | KS-PTF78+BS232 | POJISTKOVE POUZDRO | 1 | |
FU1 | F 50mA 5x20 | POJISTKA | 1 | |
TR1 | HAHN BV EI 302 2005 | TRAFO | 230V/2x6V 1,8VA | 1 |
RE1 | JV-5S-KT | JV-5S-KT | 1 | |
RE2 | JV-5S-KT | JV-5S-KT | 1 | |
D1 | 1N4007 | 1 | ||
D2 | 1N4007 | 1 | ||
D3 | 1N4007 | 1 | ||
D4 | 1N4007 | 1 | ||
C3 | CE 1000u/25V | 1m/16V | 1 | |
C4 | CK 100n/63V | 100n | 1 | |
C5 | CE 470u/10V | 470u/16V | 1 | |
C6 | CK 100n/63V | 100n | 1 | |
C7 | CE 470u/10V | 470u/16V | 1 | |
C8 | CK 100n/63V | 100n | 1 | |
R11 | RR W1 10K | 10k | 1 | |
R12 | RR W1 10K | 10k | 1 | |
T1 | BC337-25 CDIL | RELE1 | 1 | |
T2 | BC337-25 CDIL | RELE2 | 1 | |
IO2 | SEMTECH 78L05/SEMT | 78L05 | STABILIZATOR 5V | 1 |
IO3 | SEMTECH 78L05/SEMT | 78L05 | STABILIZATOR 5V | 1 |
Cuprextit 160x100x1,5 | JEDNOVRSTVÝ | DPS | 1 | |
Z-109F | KPDIN07 | KRABICE | 1 | |
KDA6M3X35 | DISTANČNÍ SLOUPEC | 4 | ||
SB812965 | DRŽÍ DPS | ŠROUBY | 4 | |
1 |
Celkem bez poštovného cca 610 Kč + programovací kabel.
Konečně jsem dostal "vývoj" Dinduina do podoby , která se mi líbí.
Oproti původnímu zámeru jsem zrušil UART a procesor je zpět ATMEGA328P.
Je to jednoduché zapojení :
V tuto chvíly má tyto parametry:
- programování přes SPI / ISP
- LCD 2x8 znaků
- procesor ATMEGA 328 P s krystalem 16MHz
- 3 tlačítka (ENTER, PLUS, MINUS) + reset
- napájení 230V / AC
- max. příkon 1,8W
- nezávislý zdroj 5V/100mA vyvedený na svorky
- 2 relé 250V/5A ze signalizací sepnutí.
- 6 univerzálních vstupů / výstupů s PULL-UP odpory 4k7. (jsou využity analogové vstupy: A0-A5, které se dají adresovat jako digitalni I/O: 14-19)
- vše v DIN krabici šíře 89mm.
Jako komunikační protokol lze využít I2C/IIC, 1-WIRE, SW SERIAL, ...
Vstupy jsou připraveny pro : termistory (2-10k Ohm), tlačítka/relé, 1-WIRE (např DS18b20), I2C (LCD, ARDUINO,...), ...
Pro delší vedeni je vhodne připojit k cidlum paralelně kondenzator v řadech pF.
Arduino I2C LCD
Dneska se podíváme na můj boj Arduina s rozhraním I2C pro LCD display.
Na EBAY jsem si objednal modul :
http://www.ebay.com/itm/141146290709?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1497.l2649
Ten se připojí (v mém případě přes hřebínky přiletuje) na LCD display, pomocí 4 drátků propojí s Arduinem (+5V, GND, SDA, SCL) a mělo by vše fungovat.
Stahnul jsem si z internetu první knihovnu na kterou jsem narazil a zkusil své štěstí. => nevyšlo to.
První problém byl v ardesování. Samotný modul nemá na začátku propojen žádný adresovací pad (A0, A1, A2) a tudíž má adresu "0x27"
Druhá věc je správná knihovna. Nakonec jsem si stáhnul tuto:
http://www.play-zone.ch/en/fileuploader/download/download/?d=0&file=custom%2Fupload%2FFile-1345667375.zip
a po nahrání examplu už display vesele funguje.
Arduino ATMEGA328 bez bootloaderu
dodatek ze dne 5.6.2014:
Při delším zkoušení a hledání jsem zjistil, že tuto funkci umí jakékoliv Arduino IDE 1.0x.
Zvolíš si správný HW (např.Arduino MINI w/328), správný port a jako programátor si vebereš Arduino as ISP (samozřejmě že musíš mít Arduino, které má nahraný program Arduino as ISP).
Když klikneš a UPLOAD, skončí to nejspíš chybou.
Musíš použít File > Upload whit user programmer.
Tím pádem, žádné úpravy Board.txt, preference.txt, ... jednoduše a funkčně.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
původní text:
Tak se mi stalo že odešel převodník USB/UART.
Jasně že jsem si hned objednal nový, ale chtěl jsem zkusit jestli to půjde i bez něj - mám přece druhé Arduino tak jej použiju jako ISP programator.
Je třeba použít Arduino 0022 nebo obdobné (s 1.0x nefunguje) a do arduino-0022hardwarearduino souboru boards.txt vložit tento kod
##############################################################
DINDUINO_MINI.name=ISP DINUDINO Mini ATmega328
DINDUINO_MINI.upload.protocol=stk500
DINDUINO_MINI.upload.maximum_size=32768
DINDUINO_MINI.upload.speed=57600
DINDUINO_MINI.upload.using=arduino:arduinoisp
DINDUINO_MINI.bootloader.low_fuses=0xff
DINDUINO_MINI.bootloader.high_fuses=0xdf
DINDUINO_MINI.bootloader.extended_fuses=0x05
DINDUINO_MINI.bootloader.path=optiboot
DINDUINO_MINI.bootloader.file=optiboot_atmega328.hex
DINDUINO_MINI.bootloader.unlock_bits=0x3F
DINDUINO_MINI.bootloader.lock_bits=0x0F
DINDUINO_MINI.build.mcu=atmega328p
DINDUINO_MINI.build.f_cpu=16000000L
DINDUINO_MINI.build.core=arduino
##############################################################
a najednou můžete programovat přes ISP ....
aneb DINDUINO plné života :)
Co je to Bootloader ?
Bootloader někde počeštěn jako ZAVADĚČ je program uvnitř arduina, který umožnuje sdělit IDE ARDUINU že je připojen a je díky tomuto programu schopen přijmout kod a naprogramovat jej do arduina.
Co budeme potřebovat?
Při hledání možností arduina jsem narazil na článek, kde se místo klasických čipů ATMEGA168/328 používá vyšší verze ATMEGA1284P-PU.
http://maniacbug.wordpress.com/2011/11/27/arduino-on-atmega1284p-4/
https://github.com/maniacbug/mighty-1284p
To mě vedlo k myšlence "vymyslet" vlastní verzi arduina, které bude mít dostatek paměti pro základní
Tady budu dávat knihovny, které jsem vytvořil nebo upravil pro svoje potřeby pro SW Fritzing:
FRITZING LIBRARY: