Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

config pin w avr

03 Lut 2006 13:18 2610 12
  • Poziom 34  
    Witam,

    Czy może mi ktoś powiedzieć jak sterować tranzystorem z któregoś wyprowadzenia procesora typu avr.
    Mam podłączony do pina.1 rpzez opornik 10k tranzystor pnp a do tranzystora diodę.
    Jak napiszę config pina.1 = output to dioda cały czas świeci i nie reaguje na takie polecenia jak set czy reset pina.1.
    Jak napiszę config pina.1 = input to dioda nie świeci i nie reaguje na polecenia set/reset pina.1.

    Jak ja mam w ten sposób napisać jakikolwiek użyteczny program?
    Już mnie szlag na miejscu trafia :P

    :)

    Pozdrawiam
  • Poziom 18  
    Witam!!!
    Zamieść programik który wgrywasz do avr'a to zerknę na niego powiem co jest nie tak:) Pozdrawiam Piotrek
  • Pomocny post
    Poziom 11  
    Najpierw to musisz ustawic ten pin jako wyjsciowy. Sluzy do tego rejestr DDRA w tym przypadku. Odpowiednio kazdy bit tego rejestru konfiguruje wyjscia rejestru PORTA. Jedynka oznacza bit portu jako wyjscie.

    Nastepna sprawa ze stan wyjscie nie zmieniasz poprzez zmiane rejestru PINA tylko ze PORTA. PINA sluzy tylko do podczytywania stanu na wejsciu badz wyjsciu ukladu.
  • Pomocny post
    Poziom 39  
    ePeter1234 napisał:
    Witam!!!
    Zamieść programik który wgrywasz do avr'a to zerknę na niego powiem co jest nie tak:) Pozdrawiam Piotrek

    Nie ma co oglądać , tylko miast set/reset pina.1( :?: ) wpisać set/reset Porta.1.Nieznajomość budowy uC-ka sie mści :D

    Piotrek
  • Poziom 34  
    wgrywam tak...

    • config pina.1 = output

      Do
      waitms 500
      reset pina.1
      waitms 500
      set pina.1
      Loop

    Jak tak napiszę to dioda świeci cały czas, a powinna przecież migać. Jak jest reset to powinna być zaświecona.

    A jak zamiast config pina.1 = output napiszę config pina.1 = input to dioda cały czas jest zgaszona.

    :)

    Dodano po 1 [minuty]:

    mi nie najgorzej szło w 8051, ale teraz muszę coś zrobić na avr no i tak to jest. te porty i piny są najgorsze w tym avr :)

    dzięki :)

    Dodano po 26 [sekundy]:

    zanim bym do tego doszedł to mogło by trochę potrwać :D

    Dodano po 17 [minuty]:

    hmmm
    czemu ten atmega32 jest taki powolny?
    jak mu kazałem napisać coś na wyświetlaczu lcd to było widać jak znaczek po znaczku pokazywał. :)

    Dodano po 4 [minuty]:

    w 8051 waitms 25 to była dosłownie chwila, pyk i koniec
    a tutaj trzeba się trochę naczekać :)
    kwarc tak 12MHz
  • Poziom 11  
    Bo dziala pewnie na zegarze wewnetrznym czyli 1MHz
    Zobacz fusebits dla zegara. Dla Atmega16 musi byc chyba 1111 zeby wlaczyc zewnetrzny kwarc.

    Poczytaj najlepiej manuala. Chyba ze podasz typ ukladu i Ci powiem.

    Powodzenia.:)
  • Pomocny post
    Poziom 34  
    Czas uporządkować wszystkie odpowiedzi. Z każdym portem AVR'a związane są trzy rejestry Portx, Pinx i DDRx (x to interesujący nas port A, B, C, D a czasami nawet E)
    Rejestr Portx - w nim przechowywane są dane wyjściowe, które przenoszone są na końcówki uC jeżeli są ustawione one jako wejście.
    Rejestr Pinx jest rejestrem odzwierciedlajacym stan końcówek.
    Rejestr DDRx ustawia porty (końcówki) jako wejściowe (odpowiedni bit = 0) lub wyjściowe (odpowiedni bit = 1). Tak więc instrukcja Config oddziaływuje na rejestr DDRx ustawiając kierunek działania portu lub bitu w porcie
    Jeżeli wysyłamy daną do portu (końcówki) musimy go ustawić jako wyjściowy. Dioda nie migała bo nie wyprowadzono danych przez Portx
    Powinno być tak:
    Config Pind.0 = 1
    Do: Portd.0 = 1: Waitms 500: Portd.0 = 0: Waitms 500: Loop

    Jeżeli badamy stan końcówki to ustawiamy ją jako wejście
    Configd.1 = 0
    Portd.1 = 1 'Załączamy do końcówki d.1 wewnętrzny rezystor podciągający do Vcc.
    If Pind.1=0 then ... 'Jeżeli zewrzemy końcówkę d.1 z masą program to wykryje.

    Reasymując są trzy rejestry
    Portx (Portx.y) - dane wyjściowe, Pinx (Pinx.y) - dane wejściowe, DDRx - kierunek pracy portu (DDRx.y odpowiednio dla końcówki)

    Zmień w programie z Pin na Port i będzie dobrze.

    Podpięcie do AT Megi kwarcu niczego nie załatwia. Fabrycznie jest ustawiony na wewnętrzny oscylator 1MHz. Albo w Bascomie zadeklaruj 1MHz albo w programatorze Bascoma ustaw "fusy na 1111. Oryginalnie sa ustawione na 0001.
  • Poziom 34  
    hmmm to znaczy, że napisanie $crystal = 1000000 spowoduje, że procesor będzie korzystał z zewnętrznego kwarcu 12MHz?
    jeśli nie, to jak te fusy ustawiać :D ?

    Dodano po 1 [minuty]:

    chodzi mi oczywiście o układ m32
  • Poziom 39  
    Granat :) napisał:

    ...
    mi nie najgorzej szło w 8051, ale teraz muszę coś zrobić na avr no i tak to jest. te porty i piny są najgorsze w tym avr :)
    ...

    Te piny czy porty , to jest dopiero czubek góry lodowej.Dobrze Ci radzę - poczytaj dokumentację , bo tak na łapu capu , przy ustawianu fusów możesz uziemić proca.Zwróć uwagę na JTAG-a , który przy standardowych ustawianiach , blokuje kilka pinów proca.Itd,itp.

    Piotrek

    PS
    Napisz jakiego używasz programatora i jakiego programu , do "ładowania" kodu do proca.
  • Pomocny post
    Poziom 34  
    Napisanie $crystal = 1000000 spowoduje, że Bascom dostosuje opóźnienia do aktualnej częstotliwości pracy zegara i program zacznie zachowywać się normalnie. Aby przełączyć procek na zewnętrzny oscylator kwarcowy trzeba go podłączyć do programatora obsługiwanego przez Bascom. Kliknąć ikonkę programowania w Bascomie, wybrać programowanie ręczne, co pozwoli na wyświetlenie okna z zawartością bufora. Wybrać wtedy trzeba zakładkę 3 Lock and Fuse Bits. Programator odczyta aktualne nastawy procka. W Fuse Bits trzeba odszukać miejsca FuseBit A987 gdzie po prawej stronie pojawi się prawdopodobnie wartość 0001: Internal RC oscillator 1 MHz. Klikając na to pole pojawi się lista rozwijalna z której wybieramy 1111:1111 External Xtal. Po prawej stronie klikamy Write FS. Nowe "fusy"zostają zapisane i od tej pory procek gna jak szalony z szybkością zewnętrznego kwarcu. Proponuję na początek nic więcej nie zmieniać, a już na pewno nie bawić się SPIEN ani nie rezygnować z RESETU w zamian za dodatkową końcówkę portu, bo szeregowe programowanie zostanie uniemożliwione. Wtedy pomoże tylko programowanie równoległe albo zakup nowego procka - chyba że została zapisana w nim ostateczna wersja programu.

    W Bascomie można w miarę bezpiecznie manipulować "fusami". W innych programach wystarczy nieopatrzny ruch.
    Powyższe testowałem na ATMEGA 8. Dla M32 powinno być podobnie. Spokojnie podejrzyj ustawienia, lecz nie zapisuj pochopnie.

    Myśl i rób. Nigdy odwrotnie.
  • Poziom 34  
    Więc skorzystaj z zielonej ikony na pasku i wybierz programowanie ręczne (manual program), lub zmień ustawienia w opcjach, aby nie programował automatycznie. Ja też mam STK 200/300.
  • Poziom 34  
    OK
    Ustawiłem fusy, wyłączyłem JTAG'a. Wszystko ładnie chodzi. Mam ATMEGA32 Fusebit A987 to 1111 i układ ładnie pracuje z kwarcem 12MHz. Trzy rejestry do zarządzania pinami I/O też już znam :)
    Dzięki wszystkim za pomoc. Zamykam temat.
    Pozdrawiam :D