Pull-up rezistor vs GND

Zdravím, jako začínající elektronik (v oblasti programování a procesorů) jsem se začal zabývat AtTiny13. Programuji v arduino programu, do kterého jsem si stáhnul překladač pro attiny. Zatím mám dost problémů, ale mám strach programovat v asembleru apod, protože je to moc složitý jazyk. Mám dva dotazy.

  1. Stále mi funguje A/D převodník jen na pinu 2 a nikde jinde. Někdo mi říkal že je potřeba v programu přepínat vstupy, ale stejně mi to nefunguje. Pokud mám jednoduše zvolen například PB2 jako vstup tak nefunguje.

  2. Narazil jsem na zapojení ledek v matici. Problém je, že v zapojení je potřeba aby výstupy někdy tvořili plus napájení a někdy mínus. Vím, že attiny 13 má pull-up rezistor, díky kterému dokáže udělat 5V. Dokáže ale díky LOW hodnotě výstup uzemnit a tím vytvořit obvod spolu s dalším výstupem v HIGH?

google.cz/search?q=Funkce+v … ByZnNpNeIM:

fritzing.org/projects/charlieple … ar-20-leds

Díky za odpověď. (ps: mám přejít na programování v céčku nebo zůstat u arduino programování? )

Ahoj.
1.) Zkus sem hodit zdroják, ať můžeme vydedukovat, kde děláš chybu.
2.) Nějak jsem se v tom tvém vysvětlování ztratil, ale asi takto:
Vnitřní pull-up má zhruba 20-50kOhm, což při 5V dělá proud max. 0,25mA.
S tímto proudem nemáš šanci ledku rozsvítit. Proto se při svícení LED programují výstupy jako totemy.
POZOR: Odpor tam však musí být a tak se vkládá zpravidla do anod LEDek. (Viz. tvé schéma)
Velikost odporu si musíš napočítat sám dle typu LEDek.

Nevím teď přesně jak kód byl, ale jednoduchý příklad na kterém jsem to testoval je níže. Jde jednoduše o to, že potenciometrem měním napětí na vstupu a stejně tak se měnil jas LED diody na výstupu.

Problém je, že pokud dám vstup například 2 nebo 4 tak to nefunguje. Čte to napětí jen a pouze na vstupu 3.

void setup() {

pinMode(0, OUTPUT);
pinMode(3, INPUT);

}

void loop() {
analogWrite(0, analogRead(3));
}


K druhé části otázky, už znám odpověď. AtTiny dokáže jak uzemňovat tak připojovat + napětí. Takže to jen doma ještě ozkouším.

  1. analogRead(Parametr) - Co ten parametr znamená ? Pin procesoru ? Kanál AD převodníku ?
  2. analogWrite(Parametr1, Hodnota) - Stejná otázka jako 1)
  3. pinMode(Paratmetr1, Hodnota) - Stejná otázka jako 1)

ad 1) analogRead(3)

  • Pokud je to na pouzdru pin 3, tak je to na AD převodníku kanál 2, IO pin B4 (brána B, bit 4).
  • Pokud je to na AD převodníku kanál 3, tak je to na pouzdru pin 2, IO pin B3 (brána B, bit 3).

ad 2) analogWrite(0, hodnota)

  • žádný AVR procesor nemá analogový výstup. Analog se tvoří pomocí PWM. Jenže HW PWM má ATtiny13 jenom 2 - a to OC0A a OC0B - tedy oba jsou 0.

ad 3) pinMode(0, hodnota)

  • Co je ten první parametr zač ? Pouzdro nemá pin 0, takže to vypadává ze hry.

Moje rada je :

  1. Vezmi si datasheet a postupuj podle datasheetu - nastavení pinů, nastavení periferií, nastavení časovačů atd.

  2. Zapomeň na Arduino - to je prostě hroznej paskvil. Použij ho maximálně jako programovací prostředí, pomocí kterého program nejenom přeložíš, ale dostaneš ho i do procesoru. Mnohem lepší by ale bylo použít Atmel Studio. Jednak tam máš i simulátor (s chybama, ale je tam) a výsledný .hex pak pomocí Arduino prostředí nahraješ do procesoru. Používám AVR Studio 4.19 (primárně pro assembler) a Atmel Studio 7 (pro assembler i pro Cčko). Oba mají své výhody i nevýhody, ale osobně jsem si pro Cčko na AS7 celkem rychle zvyknul.

Zkus porovnat následující zápisy :

  1. Pin 0 brány B na výstup :
    Arduino : pinMode(0, OUTPUT);
    Cčko : DDRB |= (1<<PB0);
    Assembler : sbi DDRB, PB0

  2. Pin 3 brány B na vstup :
    Arduino : pinMode(3, INPUT);
    Cčko : DDRB &= ~(1<<PB0);
    Assembler : cbi DDRB, PB3

Pokud chceš, můžeme tady zkusit dát dohromady Cčkovskou verzi řízení jasu LEDky podle hodnoty z potenciometru. Program bude obsahovat vlastně jenom 4 části :

  1. Nastavení IO pinů - ta bude nejjednodušší.
  2. Nastavení timeru pro PWM výstup - pro začátek použijeme HW PWM. Je to trošku jednodušší, než ho generovat softwarově.
  3. Nastavení AD převodníku pro cyklické čtení hodnoty z pinu.
  4. Hlavní smyčku, kde budeme hodnotu z AD převodníku přehazovat do PWMka - pro začátek to uděláme v hlavní smyčce, pak bychom to mohli přehodit do přerušení od časovače a v hlavní smyčce se o to nebudeš muset vůbec starat.

Môžem len potvrdiť to, čo písal Balů. Programuj to v Atmel studiu a v C-ku s datasheetom v ruke (na monitore).

Ak nepoznáš začiatky C, je veľa kníh, ktoré ťa to naučia (napr. Herout - asi najlepšie, nájdeš na nete). Nahodíš si napríklad Code::Block a tie základy sa naučíš za chvíľu. Jednotlivé špecifikácia ohľadom procesorov nájdeš v literatúre priamo k nim (Programujeme AVR v jazyku C a pod, sú aj také , kde je vysvetlený procesor aj s perifériami - ak nenájdeš, pomôžeme) alebo aj v datasheete, kde je väčšinou aj ukážka kódu, ako v ASM tak aj v C pre jednotlivé periférie.

Tady je pinout tiny13 pro arduino:
camo.githubusercontent.com/b621 … 562e6a7067

Arduino má piny digitální (D) a analogové (A).
Mohou být číslované jinak než piny portů.
Na obrázku v odkazu je v modrém poli např 4/A2.
Je to digitální pin 4 a analogový A2

Pro analogRead() používej piny A0 pro adc0, A1 pro adc1 atd.
Pro analogWrite používej digitální piny (v tomto případě jsou číslovány stejně jako piny portu (D0=PB0, D1=PB1 atd).

[code]int x;

void loop() {

x=analogRead(A1); // čti kanál A1 (ADC1, portb.2)
analogWrite(0,x); // pwm na D0 (portb.0)
}
[/code]

.