Hodiny s Atmega8

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
FHonza
Příspěvky: 1443
Registrován: 20 lis 2012, 01:00
Bydliště: Praha

#31 Příspěvek od FHonza »

Port B už je nastavený jako vstupní, tak na jeho libovolný volný pin. Neměříš velikost napájení, ale jenom jeho přítomnost. Testování bude stejné, jako test nastavovacích tlačítek.

Uživatelský avatar
buchar
Příspěvky: 57
Registrován: 28 říj 2007, 02:00
Bydliště: Násedlovice

#32 Příspěvek od buchar »

Zhruba v kostce vím co mi popisuješ a nějak tak jsem to měl na mysli, že nějaký port bude hlídat přítomnost a ne měřit, ale stejně nevím co přesně vepsat do kódu. Ale zkusím se s tím nějak poprat. Ale určitě se budu ještě několikrát ptát. To co je pro mnohé z vás samozřejmost, je pro mě neznámý problém. Jsem na úplném začátku s Céčkem a chci se to naučit, jenže kdo ví jak dlouho mi to bude trvat. Jsem už starší a do hlavy to moc neleze. A na netu toho taky moc není (v češtině).
Dám si to do nějakého simulátoru (třeba Proteus) a budu zkoušet.
Zatím moc dík.
PS: ale nápověda by bodla ;-)

Uživatelský avatar
Bernard
Příspěvky: 3614
Registrován: 27 kvě 2005, 02:00

#33 Příspěvek od Bernard »

Napájení segmentovek cykluje v přepínači switch(show_t). Takže když si pojmenuješ stav vstupního pinu ext_bat, tak pro nulovou hodnotu následně vynuluješ i port C a nic nebude svítit. To if zařadit do každého kejsu.

Kód: Vybrat vše

switch(show_t)
    {
        case 0:    //show minutes
            PORTC = 0x04;
            if (!ext_bat) {PORTC = 0;}
            PORTD = (~segs[min_1]) & ~_BV(_s_dot);
            break;
    ....
[/b]

Uživatelský avatar
buchar
Příspěvky: 57
Registrován: 28 říj 2007, 02:00
Bydliště: Násedlovice

#34 Příspěvek od buchar »

Bernarde moc děkuji, zkusím to tam nějak napářit. Dám vědět hned jakmile se mi to podaří. A když ne, tak se taky ozvu :-)

Uživatelský avatar
buchar
Příspěvky: 57
Registrován: 28 říj 2007, 02:00
Bydliště: Násedlovice

#35 Příspěvek od buchar »

Tak jsem to vepsal a chtěl kompilovat, ale vybaflo to na mě nesouhlasnou hlášku.
Přílohy
Snímek obrazovky (25).png

Uživatelský avatar
Bernard
Příspěvky: 3614
Registrován: 27 kvě 2005, 02:00

#36 Příspěvek od Bernard »

Na jaký pin máš přivedené to externí napájení?

Uživatelský avatar
buchar
Příspěvky: 57
Registrován: 28 říj 2007, 02:00
Bydliště: Násedlovice

#37 Příspěvek od buchar »

Napájení je klasicky na pin7.
Vím, že musím nadefinovat pin, který bude hlídat jestli je zapnuto napájení a když ne, tak se vypne displej a čas se udržuje z baterie. Jenže nevím jak ho nadefinovat a kam ten zápis umístit. Třeba pin15.

Uživatelský avatar
Bernard
Příspěvky: 3614
Registrován: 27 kvě 2005, 02:00

#38 Příspěvek od Bernard »

Dobrá, tak pin 15 je pro kompilátor PB1. Tak bude snadnější nedělat další definici ext_bat ale rovnou tam napsat:

Kód: Vybrat vše

switch(show_t)
    {
        case 0:    //show minutes
            PORTC = 0x04;
            if (!PB1) {PORTC = 0;}
            PORTD = (~segs[min_1]) & ~_BV(_s_dot);
            break;
    ....

Uživatelský avatar
buchar
Příspěvky: 57
Registrován: 28 říj 2007, 02:00
Bydliště: Násedlovice

#39 Příspěvek od buchar »

Teď už kompilace proběhla hladce. Nahraju a dám vědět.

Uživatelský avatar
buchar
Příspěvky: 57
Registrován: 28 říj 2007, 02:00
Bydliště: Násedlovice

#40 Příspěvek od buchar »

Tak displej při odpojení napájení pořád svítí i na baterii. Samozřejmě slaběji.

Uživatelský avatar
Bernard
Příspěvky: 3614
Registrován: 27 kvě 2005, 02:00

#41 Příspěvek od Bernard »

Nějak nedokážu vysledovat na obrázcích těch upravených DPS, kde je spojení mezi vstupem napájení +5V (ještě před diodou) a pinem 15 (PB1) přes nějaký odpor. :?:

Uživatelský avatar
buchar
Příspěvky: 57
Registrován: 28 říj 2007, 02:00
Bydliště: Násedlovice

#42 Příspěvek od buchar »

Na to jsem při návrhu plošňáku nějak pozapoměl, ale teď jsem zapojil odpor 10K na pin15 a na +5V (ještě před diodu). Mám to tak jako Danyk (odkaz výše).
Přílohy
IMG_20210422_204956.jpg

Uživatelský avatar
FHonza
Příspěvky: 1443
Registrován: 20 lis 2012, 01:00
Bydliště: Praha

#43 Příspěvek od FHonza »

Takhle se stejně segmentovka na okamžik rozsvítí (a kvůli tomu svítí slabě).

Kód: Vybrat vše

switch(show_t)
    {
        case 0:    //show minutes
            PORTC = 0x04;
            if (!PB1) {PORTC = 0;}
            PORTD = (~segs[min_1]) & ~_BV(_s_dot);
            break;
    ....
Buď přepsat každý case

Kód: Vybrat vše

  case 0:    //show minutes   
     if (!PB1) {PORTC = 0;} else {PORTC = 0x04;}
     ...
nebo před celý switch:

Kód: Vybrat vše

  if (PB1)
  {
     switch(show_t)
    {
       ...
    }
  }
  else
  {PORTC = 0;}

Uživatelský avatar
buchar
Příspěvky: 57
Registrován: 28 říj 2007, 02:00
Bydliště: Násedlovice

#44 Příspěvek od buchar »

FHonza díky, ale já už na to před chvílí přišel. Nahrál jsem do procesoru a odzkoušel a zdá se, že to funguje. Po odpojení napájení jehož přítomnost hlídá pin15 displej zhasne a po půlhodině jsem napájení zapnul a čas běžel pořád dál. Hodiny šly i při zhasnutém displeji.
Přílohy
Snímek obrazovky (26).png

Uživatelský avatar
buchar
Příspěvky: 57
Registrován: 28 říj 2007, 02:00
Bydliště: Násedlovice

#45 Příspěvek od buchar »

Je to první řádek a poslední if dole.
Ale zkusím i tvůj nápad.
A díky i Bernardovi, který mi dost napověděl a já už jsem si s tím jen hrál. Je pravda, že umím naprogramovat jen blikající diody, ale tady jsem použil logiku a selský rozum. No a vyšlo to. Teď se do toho pustím hlouběji a budu se učit ať nejsem pořád odkázaný na druhé s každou blbinou.
Takže ještě jednou velký dík chlapi!!!

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“