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

ATmega8535 - przetwornik 8bitowy AC i wysylanie do ATmega128

bikemc 11 Mar 2008 20:52 1442 11
REKLAMA
  • #1 4898366
    bikemc
    Poziom 13  
    Posty: 137
    Ocena: 2
    Witam wszystkich!

    Mam pytanie- jak zaprogramować uK, by ATmega8535 był przetwornikiem 8 bitowym AC i wysyłał dane do Atmega128. Nie może to być droga RS, gdyż tę już wykorzystuje. Jakie wybrać piny do komunikacji?

    Dzięki dziewczyny!:)
  • REKLAMA
  • #2 4898554
    tomba
    Poziom 17  
    Posty: 275
    Pomógł: 11
    Ocena: 18
    drugi uart softwarowy 1 wire, i2c, bitowo czyli 8 lub wiecej cieniutkich przewodów ... itd
  • REKLAMA
  • #3 4898856
    bikemc
    Poziom 13  
    Posty: 137
    Ocena: 2
    muszę przesłać dane poprzez TTL i to 2 kablami bo będę to robił przez rs232-> (czyli wyjście normalnie RS) ale wejście do ATmegi128 musi być nie przez normalne rs, tylko jakieś inne piny. Tylko jakie?:(
  • #4 4899449
    maxiu25
    Poziom 16  
    Posty: 190
    Pomógł: 16
    Ocena: 3
    A może jednak puść to po rs tylko pierwszą transmisje zaczynaj np od bitu adresu 0x44 a transmisje z przetwornika od 0x11. Wtedy rozpoznajesz co wysyłasz i po problemie :)
  • #5 4899923
    bikemc
    Poziom 13  
    Posty: 137
    Ocena: 2
    maxiu25
    napisałeś z głową, ale moja głowa tego nie trawi;P jak byś mógł trochę jaśniej dla mnie:) Używam wyjścia RS korzystając z funkcji PRINT w Bascomie:) jak mam to wszystko przerobić?
    dzięki!:)
  • REKLAMA
  • #6 4900086
    maxiu25
    Poziom 16  
    Posty: 190
    Pomógł: 16
    Ocena: 3
    Nie znam bascoma :)
    Jeżeli wysyłasz lub odbierasz bity po magistrali rs możesz komunikować sie z wieloma urządzeniami np za pomocą max485 napewno 32 urządzenia, jedno urządzenie pracuje jako master reszta jako slave. Master wysyła poszczególny adres do danego urządzenia (slave) i czeka na odpowiedź itd.
  • #7 4900112
    K_o_n_r_a_d
    Poziom 23  
    Posty: 318
    Pomógł: 86
    Ocena: 9
    1. ATmega128 ma wbudowane 2 UARTy sprzętowe. Co robisz z drugim?
    2. Czy wykorzystujesz sprzętowe SPI w ATmega128?
    3. Czy wykorzystujesz sprzętowe TWI w ATmega128?

    Po co kombinować jak jest az tyle możliwości a myślę, że przynajmniej jedno z wyżej wymienionych masz wolne.

    A dlaczego w ogóle chcesz używać oddzielnego AVRa jako ADC? Czyżby chcesz umieścić przetwornik w większej odległości od ATmega128? Jeśli tak to w jakiej? A jeśli nie to nie widzę sensu tak kombinować, przecież mega128 ma wbudowany ADC.
  • REKLAMA
  • #8 4900220
    bikemc
    Poziom 13  
    Posty: 137
    Ocena: 2
    K_o_n_r_a_d
    widzę że się dobrze znasz:)
    Tak AVR 128 ma 2 uarty. Wykorzystuje jeden zerowy do komunikacji z komputerem. 2 nie jest wykorzystany ( właśnie przeczytałem w instrukcji) - są to linie tylko RxD i TxD tak? Chcę mieć przetwornik oddalony o 200 metrów, więc chcę zrobić na układzie Atmega8535 z rsr232 na rs485 i dalej znów rs232 i do mojego Atmega128. Teraz ADC mi działa na moim Atmega128. Jutro zaprogramuje mojego Atmega8535 tylko jakim kodem by tylko cały czas konwertował A/C i wysyłał przez rs? Cały czas by wysyłał, żadnych przerw. Jaki to musi być kod w Bacomie? taki o:?

    $regfile = "m8535def.dat "
    $crystal = 16000000
    $hwstack = 32
    $swstack = 10 $framesize = 40

    Config Adc = Single , Prescaler = Auto

    Dim W As Integer

    Do

    Start Adc
    W = Getadc

    Print W
    Stop Adc

    Loop

    End
  • Pomocny post
    #9 4902258
    K_o_n_r_a_d
    Poziom 23  
    Posty: 318
    Pomógł: 86
    Ocena: 9
    Czy ATmega8535 ma tylko mierzsyć napięcie i wysyłać? Jeśli tak to po co taki duży uK do tego? :)

    Program może wyglądać tak:
    $regfile = "m8535.dat"
    $crystal = 16000000
    $hwstack = 32
    $swstack = 10
    $framesize = 40
    
    Dim W As Word
    
    Config Watchdog = 2048
    Start Watchdog
    Reset Watchdog
    Config Adc = Single , Prescaler = Auto , Reference = Internal
    Start Adc
    Do
       W = Getadc(0)
       Print W
       Reset Watchdog
    Loop
    End

    Ustawiłem w kodzie dodatkowo źródło napięcia odniesienia. Nie ma potrzeby zatrzymywania przetwornika po pomiarze, można go raz uruchomić i tak zostawić. Myślę, że dobrze byłoby jeszcze Watchdoga uruchomić. Na pewno nie zaszkodzi a może pomoże.
  • #10 4902307
    bikemc
    Poziom 13  
    Posty: 137
    Ocena: 2
    K_o_n_r_a_d wielki dzięki!!!:D
    Jak ma teraz odczytać te dane mój Atmega128? bo jeden UART już wykorzystuje do komunikacji z komputerem i ma on taką postać:

    $regfile = "m128def.dat"
    $crystal = 16000000
    $baud = 9600
    $hwstack = 32
    $swstack = 32
    $framesize = 32
    
    Dim A As Byte
    Dim Message As String * 16
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.3 , Rs = Porta.2       'konfiguracja linii mikrokontrolera‚ do których dołączono wyświetlacz LCD
    
    Initlcd
    Cls
    Cursor Off
    Lcd "d test"
    Lowerline
    Lcd " www.com"
    
    Print "*************************"
    Print "**   mc **"
    Print "**    wdd   **"
    Print "*************************"
    
    Do
      Input "->" , Message                                      'send prompt to terminal
      Cls
      Lcd "Rx:"
      Lowerline
      Lcd Message                                               'write received message on LCD
      Print "<-" ; Message
    Loop
    
    End


    Proszę umieszczać listingi programów w znacznikach "Code". [c_p]
  • #11 4902699
    K_o_n_r_a_d
    Poziom 23  
    Posty: 318
    Pomógł: 86
    Ocena: 9
    Dlatego, że wysyłasz dane z ATmega8535 ciągle proponuję odczytywać przy pomocy poleceń WAITKEY() lub INKEY().
    INPUT akurat do tego nie jest najlepsze.
    Proponuję też skonfigurować bufor UARTA.
    Config Serialin = Buffered , Size = 8

    O tych wszystkich poleceniach znajdziesz w pomocy.
  • #12 4902790
    bikemc
    Poziom 13  
    Posty: 137
    Ocena: 2
    K_o_n_r_a_d
    A wg Ciebie jak bym mógł zmienić swój kod? co dopisać?:) Byłbym straszliwie wdzięczny:)

    Mój kod:
    $regfile = "m128def.dat" 
    $crystal = 16000000 
    $baud = 9600 
    $hwstack = 32 
    $swstack = 32 
    $framesize = 32 
    
    Dim A As Byte 
    Dim Message As String * 16 
    
    Config Lcd = 16 * 2 
    Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.3 , Rs = Porta.2       'konfiguracja linii mikrokontrolera‚ do których dołączono wyświetlacz LCD 
    
    Initlcd 
    Cls 
    Cursor Off 
    Lcd "d test" 
    Lowerline 
    Lcd " www.com" 
    
    Print "*************************" 
    Print "**   mc **" 
    Print "**    wdd   **" 
    Print "*************************" 
    
    Do 
      Input "->" , Message                                      'send prompt to terminal 
      Cls 
      Lcd "Rx:" 
      Lowerline 
      Lcd Message                                               'write received message on LCD 
      Print "<-" ; Message 
    Loop 
    
    End


    Proszę umieszczać listingi programów w znacznikach "Code". Więcej próśb nie będzie. [c_p]

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy programowania mikrokontrolera ATmega8535 jako 8-bitowego przetwornika analogowo-cyfrowego (ADC) oraz przesyłania danych do ATmega128 bez użycia standardowego portu RS232, który jest już zajęty. Proponowane rozwiązania obejmują wykorzystanie drugiego sprzętowego UART w ATmega128, magistrali I2C, SPI lub magistrali 1-wire jako alternatywne kanały komunikacji. Wskazano, że ATmega128 posiada dwa sprzętowe UART-y, z których jeden jest wolny i może służyć do odbioru danych z ATmega8535. W przypadku długiego dystansu (ok. 200 metrów) sugerowano zastosowanie konwerterów RS232 na RS485 dla stabilnej transmisji. Przykładowy kod w Bascom AVR dla ATmega8535 pokazuje ciągłe odczytywanie wartości ADC i wysyłanie ich przez UART bez przerw, z wykorzystaniem konfiguracji przetwornika i watchdog. Dla ATmega128 zaproponowano odbiór danych za pomocą buforowanego UART-u z funkcjami WAITKEY() lub INKEY() zamiast INPUT, co poprawia stabilność odbioru. Omówiono także konfigurację wyświetlacza LCD do prezentacji odebranych danych. Całość wskazuje na praktyczne podejście do implementacji ciągłej transmisji pomiarów ADC z jednego mikrokontrolera do drugiego z wykorzystaniem dostępnych interfejsów sprzętowych i protokołów komunikacyjnych.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA