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

Xmega 128A1U UART 1-wire

05 Lis 2016 07:54 1842 9
  • Poziom 16  
    Mam problem z czytaniem szyny 1 -wire

    Xmega 128A1U UART 1-wire

    mam 4 termometry czytam pojedynczo ich adresy poprzez
    OW_Write(0x33);
    i mam następujące wyniki

    0100010100111010010001010111110111001000000000000000000000010101
    0000010100111010010001010111110111001000000000000000000000010101
    -''-

    1000010100101010110101011001110111001000000000000000000000111110
    0000010100101010110101011001110111001000000000000000000000111110
    -''-

    1000010100100000101101000010100001101000000000000000000000100000
    0000010100100000101101000010100001101000000000000000000000100000
    -''-

    1000010100100101100110010010100001101000000000000000000000010000
    0000010100100101100110010010100001101000000000000000000000010000
    -''-
    czyli przy pierwszym czytaniu różni się pierwszy lub drugi bit od pozostałych (-''- dalej takie same wyniki
    Oczywiście searchrom nie działa i kończy się na trzecim bicie wynikiem 11 czyli stan bez urządzeń na szynie.


    Kod od funkcji najwyższej
    Kod: c
    Zaloguj się, aby zobaczyć kod
  • AM TechnologiesAM Technologies
  • Moderator Mikrokontrolery Projektowanie
    Po co ci dwa tranzystory w ukłądzie darlingtona? Jeden w zupełności wystarczy. Zmniejsz pull up do 2,2k i sprawdź czy pomoże. 4k7 stosuje się do zasilania 5V, tu masz tylko 3,3V i może poziom nie zdąży narosnąć.
  • AM TechnologiesAM Technologies
  • Poziom 16  
    tmf napisał:
    Po co ci dwa tranzystory w ukłądzie darlingtona?

    Z noty Atmela AVR318 strona 3

    Zmniejszyłem do 2,2kR i nie ma różnicy.

    Układ jest podpięty na stałe (zasilanie) i programowo resetuję procesor(odczytuje jego typ w Eclipse), za każdym razem pierwszy odczyt różni się od pozostałych. Więc to raczej nie problem z podciąganiem.

    Ale przy szybkiej zmianie termometrów dostaje wyniki w hex
    Zainicjowano do celów debugowania.
    Zainicjowano uart do celów 1-wire.
    a254abb913007c
    a054abb913007c
    a054abb913007c
    a042d1416004
    a042d1416004
    a042d1416004
    a042d1416004
    a05ca2be1300a8
    a05ca2be1300a8
    a05ca2be1300a8
    a05ca2be1300a8
    a05ca2be1300a8
    a05ca2be1300a8
    a0a4991416008
    a0a4991416008

    binarnie
    Zainicjowano do celów debugowania.
    Zainicjowano uart do celów 1-wire.
    czytanie bitow: 0100010100100101100110010010100001101000000000000000000000010000
    czytanie bitow: 0000010100100101100110010010100001101000000000000000000000010000
    czytanie bitow: 0000010100100000000000010010100001001000000000000000000000010000
    czytanie bitow: 0000010100111010010001010111110111001000000000000000000000010101
    czytanie bitow: 0000010100111010010001010111110111001000000000000000000000010101
    czytanie bitow: 0000010100111010010001010111110111001000000000000000000000010101
    czytanie bitow: 0000010100100000101101000010100001101000000000000000000000100000
    czytanie bitow: 0000010100100000101101000010100001101000000000000000000000100000


    Pierwszy inny a pozostałe bez błędów.
    czyli jednak coś z zasilaniem


    log z Searchrom

    Zainicjowano UART do celów debugowania.
    Zainicjowano UART do celów 1-wire.
    czytanie bitow: 0100010100100000101101000010100001101000000000000000000000100000
    czytanie bitow: 0000010100100000101101000010100001101000000000000000000000100000
    czytanie bitow: 0000010100100000101101000010100001101000000000000000000000100000
    czytanie bitow: 0000010100100000101101000010100001101000000000000000000000100000
    Response nr 1 0 0
    Response nr 2 0 1
    Response nr 3 0 1
    Response nr 4 1 1
    NoResponse nr 4 1 1
    petla 0 z-0 00000000


    Response nr 1 1 0
    Response nr 2 0 1
    Response nr 3 0 1
    Response nr 4 1 1
    NoResponse nr 4 1 1
    petla 1 z-0 10000000


    Response nr 1 1 0
    Response nr 2 0 1
    Response nr 3 0 1
    Response nr 4 1 1
    NoResponse nr 4 1 1
    petla 2 z-0 10000000


    Response nr 1 1 0
    Response nr 2 0 1
    Response nr 3 0 1
    Response nr 4 1 1
    NoResponse nr 4 1 1
    petla 3 z-0 10000000

    Przy 4 bicie cały czas 2 jedynki.

    a może jest problem że on ten 1 bit źle szczytuje
    powinno być 0 1 a on czyta 0 0 lub 10
  • Moderator Mikrokontrolery Projektowanie
    Widzę, że używasz kodów z moich książek o XMEGA. Przetestuj swój układ na jednym z kompletnych przykładów użycia 1-wire, które zamieściłem, najlepiej w układzie referencyjnym, który zamieściłem w książce. W XMEGA, ten dodatkowy tranzystor na USART w ogóle nie jest potrzebny - pin IO w USART możesz ustawić na tryb wired-AND, dzięki czemu nie wystawia on na TxD silnej jedynki, co umożliwia bezpośrednie połączenie z 1-wire. Także wywalasz te dodatkowe elementy, łączysz TxD z RxD, dajesz pull up 2,2k i podłączasz 1-wire. Powinno zadziałać.
  • Poziom 16  
    Ale w które której książce są przykłady na xmegę?
    mam
    XMEGA - jak zacząć? AVR. Praktyczne projekty
    XMEGA - co potrafi? AVR. Układy peryferyjne
    nie znalazłem 1-wire, może źle szukałem.

    Przeglądałem Język Dla mikrokontrolerów AVR od strony 465 jest opis 1-wire dla AVR
    i te kody są właśnie z tej książki (oczywiście zmodyfikowane).
  • Poziom 29  
    karol75 napisał:
    Ale w które której książce są przykłady na xmegę?

    Nie ma w żadnej. Tutaj już o to pytałem.
  • Poziom 16  
    landy13 napisał:
    Tutaj już o to pytałem.


    tmf napisał:

    Wstyd mi przyznać, ale masz rację. Chyba przez nieuwagę nie umieściłem portu OW-USART dla XMEGA w przykładach. Istotnie są tylko przykłady w "Język C dla..." dotyczące zwykłych AVR. Obiecuję naprawić swój błąd i te brakujące informacje umieszczę na blogu kolegi Dondu, a przykłady wrzucę do repozytorium - najnowsze są zawsze na Atmel Spaces (przykłady na stronie Helionu uaktualniam tylko w razie istotnych zmian).


    Ja bym się wcale nie pogniewał za spełnienie obietnicy.
  • Moderator Mikrokontrolery Projektowanie
    landy13 napisał:
    karol75 napisał:
    Ale w które której książce są przykłady na xmegę?

    Nie ma w żadnej. Tutaj już o to pytałem.


    Obietnicę spełniłem - jakiś czas temu wysłałem kol. Dondu artykuł na jego blog, w którym jest przykład obsługi 1-wire na XMEGA. Artykuł czeka na publikację, proszę go pomolestować to może zrobi to szybciej :)
    Jak się pojawi to wrzucę tu link.
  • Poziom 16  
    tmf napisał:
    Artykuł czeka na publikację, proszę go pomolestować to może zrobi to szybciej :)


    Dondu czuj się molestowany ;-D


    Drążę temat dalej i podglądam transmisję.
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Podgląd z oscyloskopu

    Xmega 128A1U UART 1-wire
    Widać reset odpowiedź termometru, następnie 8 bitów z bajtu 33H i dalej czytanie bitów.


    i powiększenie odczytywania bitów
    czyli pętla (zaczyna się pod literą M i czasem próbkowania)

    for(uint8_t currentBit=1; currentBit<=64;currentBit++)
    {
    printf("%x",OW_ReadBit());
    }

    Xmega 128A1U UART 1-wire


    czyta cały czas pierwsze 5 pozycji jako 0
    a na oscylogramie widać 00010100...

    Co jest nie tak?

    W moim przypadku odpowiedź termometrów jest bardzo szybka.
    Czy nie powinienem sprawdzić 1 bitu?
    A może zmienić prędkość UART?

    Najlepsze że jeżeli zwiększę pętle do 100 to dopiero bit 67 jest 1 czyli wygląda tak jakby pierwsze 2 były przypadkowe i nadmiarowe.


    000001010010101011010101100111011100100000000000000000000011111010111111111111111111111111111111111111
    000001010010101011010101100111011100100000000000000000000011111010111111111111111111111111111111111111
    000001010010101011010101100111011100100000000000000000000011111010111111111111111111111111111111111111
    000001010010101011010101100111011100100000000000000000000011111010111111111111111111111111111111111111
    000001010010101011010101100111011100100000000000000000000011111010111111111111111111111111111111111111