logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[ATmega128][C] Funkcje wyjścia PB6.

carek49 04 Lis 2008 21:35 1087 7
REKLAMA
  • #1 5702583
    carek49
    Poziom 13  
    Witam,
    Potrzebuję sterować diodką podłączoną do PB6 mikrokontrolera. Niestety diodka która powinna sobie migać tylko mi świeci. Jeśli podłączę ją pod inny port to działa jak powinna. Czy problem może być związany z alternatywnymi funkcjami PORTB? (w tym przypadku OC1B?) . Program wygląda tak:

    #include "delay.h"
    #include <avr/io.h>
    void main()
    {
    PORTB|=1<<6;
    DDRB|=1<<6;
    while(1)
     {
     PORTB^=1<<6;
     delayms(100);
     }
    }


    Dodam tylko że na drugiej atmedze128 mam to samo - tj diodka nie miga na tym porcie, a na pozostałych jest OK. O co chodzi?

    Pozdro

    Poprawiłem tytuł - Regulamin. [c_p]
  • REKLAMA
  • Pomocny post
    #2 5704472
    marek-c
    Poziom 19  
    PB6 to jest xtal, więc jeśli masz zewnętrzny kwarc to tak będzie.

    Marek
  • REKLAMA
  • #3 5707241
    carek49
    Poziom 13  
    Fusebity ustawione są tak aby procek pracował z kwarcem zewnętrznym. Jednak wyjście PB6 ma alternatywną funkcję OC1B a nie XTAL.
  • Pomocny post
    #4 5707406
    marek-c
    Poziom 19  
    [datasheet]

    (PCINT6/XTAL1/TOSC1) PB6
    (PCINT7/XTAL2/TOSC2) PB7

    [/datasheet]

    upssss.... doc2545 to atmega168, więc się poddaję!
  • #5 5707727
    carek49
    Poziom 13  
    No właśnie :) w przypadku atmegi128 troszeczkę inaczej to wygląda. No nic spróbóję jeszcze to sprawdzić na stanowisku testowym na uczelni. Może mam dwie atmegi trefne..
  • REKLAMA
  • Pomocny post
    #6 5710978
    kasaidolar
    Poziom 19  
    Masz cos jeszcze podlaczone do tego portu?

    Wez sprawdz takie program:

    
    
    #include "delay.h"
    #include <avr/io.h>
    
    void main()
    {
    
    DDRB |= _BV(6);
    PORTB | = _BV(6);
    
    while(1)
     {
     
     PORTB |= _BV(6);
     delayms(100);
    
     PORTB &= ~_BV(6);
     delayms(100);
    
     }
    }
    
    
  • REKLAMA
  • #7 5773217
    carek49
    Poziom 13  
    Sprawdziłem i nadal jest to samo. Najlepsze jest to że na obu atmega128 jest identyczny efekt - czytaj nie działa. Może problem jest związany z alternatywnymi funkcjami wyjść PORTB. Jeśli przeniosę program na ATMega32 to po kompilacji wszystko jest cacy.. Normalnie ręce opadają. Czyżby uwalone mam dwa procki?!

    BTW: Tak na szybko jest mi ktoś z Was w stanie powiedzieć jak wyłączyć tryb zgodności ze 103, który rzekomo jest ustawiony fabrycznie ... ?

    Plizz HELP! :cry:
  • #8 5775337
    carek49
    Poziom 13  
    Okazało się że wystarczyło wyłączyć tryb zgodności i wszystko wróciło do normy.

    Dla dociekliwych dodam jeszcze info, że trzeba było w moim przypadku ustawić bezpieczniki efuse na wartość 0xFF

    W moim przypadku tak to wyglądało:
    
    avrdude -p m128 -c usbasp  -U efuse:w:0xFF:m
    


    Gratisowy pkt dla wszystkich biorących udział w temacie,

    Pozdro!
REKLAMA