Bei Watterott gib es ein sehr kleines Arduino IDE kompatibles Board (Wattuino Nanite 841). Es ist bestückt mit dem ATtiny841, Dieser Tiny ist für kleine Anwendungen mit Batteriebetrieb hervorragend ausgestattet. Neben AD Konverter, SPI und I2C Interface sind auch 2 Hardware UARTS vorhanden. Im ATtiny ist bereits ein USB Bootloader (Micronucleus) integriert, dh. dieses Miniboard kann direkt über USB programmiert werden. Die normale Arduino IDE 1.6.5 kann über den Boardmanager auf das Nanite Board ergänzt werden. Dafür muss in den Voreinstellungen das Feld "Additional Boards Manager URL" um https://github.com/watterott/wattuino/raw/master/software/Arduino/package_watterott_index.json ergänzt werden, dann tauchen im Boardmanger (Menu Platine, Boards Manager...) unten in der Liste "Watterotts AVR Boards" auf, nach Installation kann die IDE auf das Board mit dem ATtiny841 eingestellt werden. Weiterhin müssen je nach PC Betriebssystem für den Micronucleus Bootloader noch die USB Treiber installiert werden (Windows) bzw. bei Linux die USB Rules in rules.d ergänzt werden. Dann sollte das Board von der IDE erkannt werden und der Compiler durchlaufen. In der IDE kann unter Menu Programmer eine beliebige Auswahl stehen (zB. USBasp), da die IDE direkt über USB mit dem Micronucleus Bootloader kommuniziert. Die Standard Compiler Libs sind noch nicht optimal auf denn ATtiny841 abgestimmt, so wird zB. in pinMode(pin,INPUT_PULLUP) der Inputpin ohne Pullup geschaltet. Daher braucht man doch externe Pullup Widerstände. Ein angepasster Arduino Core ist aber auch schon unter https://github.com/SpenceKonde/arduino-tiny-841 verfügbar. Das kleine Board lässt sich perfekt auf ein Minibreadboard stecken und mit exterenen Komponenten ergänzen. Ich habe eine kleine Beispielanwendung geschrieben, die einen ALPS Drehencoder ausliest und die ermittelten Zählerwerte auf drei LEDs binaer ausgibt und zusätzlich über die serielle Schnittstelle ausgibt. Die können mit einem USB-Seriell Wandler am PC im seriellen Fenster der IDE angezeigt werden. Das Programm benötigt insgesamt 2670 Byte und damit 41% des verfügbaren 8K Flash Programmspeichers. [c] /* Read rotary encoder and display count binary with 3 leds and send count value through UART A.Schnell Sept. 2015 */ // pin numbers: const int encbutton = 5; // Drehencoder Pushbutton PA5 const int d1 = 7; // Drehencoder switch1 PA6 const int d2 = 6; // Drehencoder switch2 PA7 const int blueled = 8; // on Board Led PB2 const int led1 = 0; // red led1 PA0 const int led2 = 3; // red led2 PA3 const int led3 = 4; // red led3 PA4 // D1 - TX, D2 - RX for serial predefined PA1, PA2 // variables: int buttonState = LOW; // button status int counter; const char graytab[] = { 0,1,-1,0, -1,0,0,1, 1,0,0,-1, 0,-1,1,0 }; unsigned char graycode = 0; unsigned char encoderin,sw1,sw2; void setup() { Serial.begin(9600); // initialize the LED pins as an output: pinMode(blueled, OUTPUT); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); // initialize the encoder pins as an input: pinMode(encbutton, INPUT_PULLUP); pinMode(d1, INPUT_PULLUP); pinMode(d2, INPUT_PULLUP); } void loop() { buttonState = digitalRead(encbutton); digitalWrite(blueled, !buttonState); //show state of encbutton on blueled sw1 = digitalRead(d1); sw2 = digitalRead(d2); encoderin = sw1*32 + sw2*16; // encoder state to bit 4 and 5 graycode |= encoderin; // copy to graycode graycode >>= 2; // shift to bit 3 and 2, // last state shifted to bit 1 and 0 counter += graytab[graycode]; // +1 / -1 from table only if state changed digitalWrite(led3,counter & 0b00000001); // binary display of counter digitalWrite(led2,counter & 0b00000010); digitalWrite(led1,counter & 0b00000100); Serial.println(counter); } /[c]
Axel S. schrieb: > Die Standard Compiler Libs sind noch nicht optimal auf denn ATtiny841 > abgestimmt, so wird zB. in pinMode(pin,INPUT_PULLUP) der Inputpin ohne > Pullup geschaltet. Daher braucht man doch externe Pullup Widerstände. Das liegt daran, dass Atmel hier mal wieder etwas verändert hat... Neben den normalen Portregistern DDR, PORT, PIN, gibt es hier nun ein PUE, sprich Pullup-Enable Register. Das ist ein nettr kleiner Fallstrick bei dem Controller, ich spreche da aus Erfahrung. Man sollte außerdem aufpassen, da das I2C-Modul nur den Slavemodus unterstützt.
Hallo, als Ergänzung sei noch mitgeteilt, dass LunaAVR auch schon lange den ATtiny441/ATtiny841 unterstützt und das PUE Register ist in der Standartbibliothek enthalten, und erledigt den Rest.
Mit einer kleinen Ergänzung kann das PUE Register aber auch direkt für die Inputpins gesetzt werden, dann können die externen Pullup Widerstände entfernt werden: [c] .... pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); // initialize the encoder pins as an input: PUEA = 0b11100000; // Pullup for PA5 PA6 und PA7 ! pinMode(encbutton, INPUT_PULLUP); pinMode(d1, INPUT_PULLUP); pinMode(d2, INPUT_PULLUP); .... /[c]
Wo gibts hier denn ne Frage?! Oder ist das Werbung für diesen 10000. Arduino Dingens? Dann ab in den Marktbereich damit bitte.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.