Rozsvícení LED připojených přes tranzistory BC546A k ATmega8

zdravim, mam mensi problem, nepodarilo sa mi rozsvietit LEDky v tomto zapojeni:
img157.imagevenue.com/img.php?image=05275_1prac_schema_122_77lo.jpg

program:
#include “avr/io.h”
#define xtal 12000000

int main (void)
{

DDRC = 0xFF;
PORTC = 0x00;

PORTC = (1 << PC1);
PORTC = (1 << PC2);
PORTC = (1 << PC3);
PORTC = (1 << PC4);
PORTC = (1 << PC5);

return 0;
}

Bol by niekto taky dobry a poradil mi, kde mam chybu? dakujem za pomoc…

:arrow_right: administrator: přejmenováno z “LED a ATmega8”

:arrow_right: administrator: přiloženy externí soubory

To zapojení je sice zbytečně složitý (ledky můžeš po omezení proudu na 10mA připojit na port přímo), ale budiž. Tvůj program by měl rozsvítit jen diodu na PC5. Kdybys chtěl rozsvítit celej PORTC, je třeba místo samotného přiřazení použí logický součet s přiřazením PORTC |= 1<<PC0; atd. nebo to napsat do jednoho řádku. PORTC |= (1<<PC0) | (1<<PC1)…;
PORTC = 0xFF; by vakonalo stejnou službu.

Mimochodem - nevrtal jsi se v pojistkách že ne :wink: (podle definice rychlosti mcu ovšem tipuji opak… :frowning:)

s tymi poistkami to myslis ako? definicia rychlosti mcu je kvoli 12MHz krystalu…
bol by som rad, keby svietila hociktora, ale nesvieti ani jedna LEDka a to ma stve…

Tvůj program je vpořádku (přesněji rozsvítí alespoň 1 ledku a to na PC5). Hledal bych tedy chybu v HW. Zkus změřit voltmetrem napětí na pinu PC5. Pokud tam nebude Vcc, tak ti neběží procesor nebo není mezi živými. Pokud ano, je chyba v zapojení tranzistorů a diod.

Pojistky (fuses) jsou konfigurační byty v procesoru. Mají na starosti některá jeho nastavení jako zdroj hodin, WDT, BOD… Nový mcu běží z interního oscilátoru na frekvenci 1MHz. To na začátek bohatě stačí a nedoporučuju měnit, dokud to nebude třeba. Obvykle začátečník nastaví externí oscilátor místo krystalu a je vymalováno (důkladně číst datasheet a manuál programátoru - co znamená zaškrtnuté/nezaškrtnuté políčko!). Ikdyž máš připojen krystal 12MHz, nový mcu ho nebude používat.

Definice rychlosti v programu je důležitá pouze při použití knihoven, které to vyžadují (jako např. delay_xx), na fyzickou rychlost procesoru to nemá žádný vliv. Předpokládám, že nepoužíváš avrstudio a gcc protože tam je ta definice trochu jiná, ovšem při správném nastavení projektu zbytečná.

z fuses som sa hral minule a mega8 sa nedala prepalit, teraz mam novu a s fuses som sa uz nerobil nic…
ziadna LEDka nesvietila ani predtym, kym som tam nemal definiciu rychlosti…
pouzivam AVRStudio a gcc, ale asi fakt bude chyba v HW…

teraz som to meral, Vcc by malo byt 5V (nameral som 4,84V co je prijatelna odchylka), na celom PORTC je 4,84V takze fakt nechapem preco to nesvieti…

Buď jsou otočené ledky, nebo nesprávně zapojený tranzistor. Pokud uzemníš přívod ledky, který je u tranzistoru, musí se rozsvítit. Když jo, je to tranzistorem, jinak to může být obojí. Na bázi T(mezi odporem a tranzistorem) by mělo být něco kolem 0.7V.

zdravim, dostal som sa k tomu az dneska, po premerani som zistil, ze som mal diody naopak zapojene, uz mi to svieti, takze 100krat vdaka za pomoc…

mal by som este 2 otazky:

  1. Ako nastavim externy krystal 12 MHz? Pouzivam AVR Studio version 4.13 a kompilator GCC. Staci ked si v Project -> Configuration Options -> General -> policko Frequency - staci ked tam napisem 12000000?

  2. Kedze ATmega sa mi nepodarilo zohnat, poradili mi v predajni ATmega88, podla datasheetu ma presne rovnake piny ako ATmega8, ide mi o instrukcie a programovanie, ci je rovnake ako v ATmega8?

dakujem za odpovede…

Pro změnu zdroje hodin je potřeba správně nastavit fuses. To ovšem začátečníkovi nedoporučuji. Pravděpodobně bys nám tu zítra psal, že ti procesor nekomunikuje s programátorem :wink:.
Frekvence v nastavení projektu je jen pro překladač (nutné např. pro funkce z delay.h). Sama o sobě nemá žádný vliv na skutečnou pracovní frekvenci.

Mega8 a 88 nejsou programově kompatibilní (na stejný HEX). M88 je mnohem lépe vybavená, má tedy mnohem více registrů a jejich rozložení je jiné než u m8. Při použití základních periferií by se ti ovšem mohlo podařit program pro m8 bez úprav přeložit i pro m88. Záleží na využívaných periferiích.

ale ked ja potrebujem, ten MCU nastavit na externy krystal 12MHz…

z periferii pouzivam hlavne prijimac USARTu na dekodovanie infracerveneho RC5 kodu… a na vystupoch budu len 0 a 1 podla toho ci ma byt LED zhasnuta alebo svietit…

V tom případě si v ds nastuduj správné nastavení fuses pro “Full Swing Crystal Oscillator”. Hlavně si dej u programátoru pozor, jesli je zaškrtnutý políčko 0 (programmed) nebo 1(unprogrammed). Dál taky vypni CKDIV8, která je u nového procesoru aktivní.

Hodně štěstí :slight_smile:

Co je to CKDIV8? TO jsem u m8 nikdy neviděl :open_mouth: (nebo to bylo myšlené u té m88?)

kdyby jsi se podíval do datasheetu jak sám všechny odvoláváš na datasheet tak by jsi zjistil, že je to dělička hodin 8…

Nesnaž se být protivný jako já… Do datasheetu jsem se díval, asi před týdnem, koukal jsem zrovna na ty fuses, a právě jsem si nevzpomněl, že tam něco takového bylo.