RS485 + atmega32 (EvB 5.1)
: 07 wrz 2017, 15:31
Witam
Znalazłem opis komunikacji z RS485 na stronie http://bart-projects.cba.pl/rs485.html , jeden z wielu. Jednak żaden sposób nie działa.
Od kilku nocy walczę z płytką EvB 5.1 starając się odpytać czujniki temperatury AVT1705 https://sklep.avt.pl/avt1705.html po magistrali RS485.
Przerabiam własny sterownik uruchomiony lata temu
http://fpvdrones.pl/?q=node/3
Adres modułu slave - pomiaru temperatury jest ustawiony na 23, odpowiada pomiarem na wywołanie ASCI: T23(CR) czyli : 54 32 33 0D.
EvB 5.1 http://and-tech.pl/zestaw-evb-5-1/ , wyjscie RS PortD.0, PortD.1, sterowanie kierunkiem transmisji max485 na PortD.2
Kod testowego programu do wyslania zapytania z Atmega32 do AVT1705 w załączeniu (hex + bas)
W czym problem.
Prawdopodobnie w obsłudze programowej komunikacji po rs485 od strony Atmega32.
1. Atmega32 Generuje polecenie T23(CR) czyli : 54 32 33 0D
a. odsłuchuje transmisje na terminalu wpietym w rs485 i otrzymuje to co wysyłam z ATmega32 czyli 54 32 33 0D
- układ slave AVT1705 nie reaguje
b. odsłuchuje transmisje na terminalu wpietym w port rs323TTL Atmega32 (pomiedyz Atmega a MAX485) i otrzymuje to co wysyłam z ATmega32 czyli 54 32 33 0D
- układ slave AVT1705 nie reaguje
2. Z terminala wpietego w rs485 wysyłam polecenie T23(CR) czyli : 54 32 33 0D
a. układ AVT1705 odpowiada odczytem Temperatury, tak jak gdyby nie rozpoznawał komendy.
3. Wpinam interfejs USB/RS TTL na wejscie układu MAX485 i generuje z terminala polecenie ASCI: T23(CR) czyli : 54 32 33 0D
a. układ AVT1705 odpowiada odczytem Temperatury.
4. Wypinam pin sterujący kierunkiem transmisji z MAX485 (wisi w powietrzu)
- układ AVT1705 ustawiony zworką 3, automatycznie generuje pomiary i wysyla na rs485, wpięcie pinu kierunku do portuD.2 zatrzymuje automatyczne generowanie pomiaru przez AVT1705.
5. pin sterujący kierunkiem transmisji z MAX485 (podpinam do VCC, a potem do GND)
- układ AVT1705 ustawiony zworką 3, automatycznie generuje pomiary i wysyla na rs485,
Sprawdzałem już kilka kombinacji z oprogramowaniem w BASCOM, jednak bez skutku. Tzn. z terminala rs232/485 jestem w stanie zapytać AVT1705 o pomiar i otrzymuje odpowiedź. Natomiast to samo pytanie kod ASCII wysyłany z Atmega32 nie powoduje reakcji AVT1705.
Podejrzewam albo błąd w kodzie w bascom albo błąd kompilatora...
Czy możecie spojrzeć na załaczony krótki kod w Bascom ? Lub podesłać skompilowany wsad HEX napisany w C (wykluczam kompilator), który załaduje na Atmege32 i sprawdze czy układ odpowie na wysyłany ciąg ASCII z poleceniem odczytu tj. T23(CR) czyli : 54 32 33 0D
pozdrawiam
Piotr
Znalazłem opis komunikacji z RS485 na stronie http://bart-projects.cba.pl/rs485.html , jeden z wielu. Jednak żaden sposób nie działa.
Od kilku nocy walczę z płytką EvB 5.1 starając się odpytać czujniki temperatury AVT1705 https://sklep.avt.pl/avt1705.html po magistrali RS485.
Przerabiam własny sterownik uruchomiony lata temu
Adres modułu slave - pomiaru temperatury jest ustawiony na 23, odpowiada pomiarem na wywołanie ASCI: T23(CR) czyli : 54 32 33 0D.
EvB 5.1 http://and-tech.pl/zestaw-evb-5-1/ , wyjscie RS PortD.0, PortD.1, sterowanie kierunkiem transmisji max485 na PortD.2
Kod testowego programu do wyslania zapytania z Atmega32 do AVT1705 w załączeniu (hex + bas)
W czym problem.
Prawdopodobnie w obsłudze programowej komunikacji po rs485 od strony Atmega32.
1. Atmega32 Generuje polecenie T23(CR) czyli : 54 32 33 0D
a. odsłuchuje transmisje na terminalu wpietym w rs485 i otrzymuje to co wysyłam z ATmega32 czyli 54 32 33 0D
- układ slave AVT1705 nie reaguje
b. odsłuchuje transmisje na terminalu wpietym w port rs323TTL Atmega32 (pomiedyz Atmega a MAX485) i otrzymuje to co wysyłam z ATmega32 czyli 54 32 33 0D
- układ slave AVT1705 nie reaguje
2. Z terminala wpietego w rs485 wysyłam polecenie T23(CR) czyli : 54 32 33 0D
a. układ AVT1705 odpowiada odczytem Temperatury, tak jak gdyby nie rozpoznawał komendy.
3. Wpinam interfejs USB/RS TTL na wejscie układu MAX485 i generuje z terminala polecenie ASCI: T23(CR) czyli : 54 32 33 0D
a. układ AVT1705 odpowiada odczytem Temperatury.
4. Wypinam pin sterujący kierunkiem transmisji z MAX485 (wisi w powietrzu)
- układ AVT1705 ustawiony zworką 3, automatycznie generuje pomiary i wysyla na rs485, wpięcie pinu kierunku do portuD.2 zatrzymuje automatyczne generowanie pomiaru przez AVT1705.
5. pin sterujący kierunkiem transmisji z MAX485 (podpinam do VCC, a potem do GND)
- układ AVT1705 ustawiony zworką 3, automatycznie generuje pomiary i wysyla na rs485,
Sprawdzałem już kilka kombinacji z oprogramowaniem w BASCOM, jednak bez skutku. Tzn. z terminala rs232/485 jestem w stanie zapytać AVT1705 o pomiar i otrzymuje odpowiedź. Natomiast to samo pytanie kod ASCII wysyłany z Atmega32 nie powoduje reakcji AVT1705.
Podejrzewam albo błąd w kodzie w bascom albo błąd kompilatora...
Czy możecie spojrzeć na załaczony krótki kod w Bascom ? Lub podesłać skompilowany wsad HEX napisany w C (wykluczam kompilator), który załaduje na Atmege32 i sprawdze czy układ odpowie na wysyłany ciąg ASCII z poleceniem odczytu tj. T23(CR) czyli : 54 32 33 0D
pozdrawiam
Piotr
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $regfile = "m32def.dat"
- $crystal = 16000000
- $hwstack=40
- $swstack=40
- $framesize=32
- $baud = 9600
- Enable Interrupts
- Config Print0=Portd.2,Mode=Set ' specify RS-485 and direction pin
- ' Config Pind.2 = Output
- Config PORTD.2 = Output 'sprawdzalem tez Pind.2
- 'linia pd.2 jako wyjscie
- Config Serialin = Buffered , Size = 23
- 'konfigurujemy LCD
- Config Lcd = 20 * 4
- Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
- Cursor Off Noblink
- Cls
- Set Porta.2
- ' ------------------------
- Declare Sub Odczyt_zn
- Dim Zn As String * 1
- Dim Zm_lan As String * 23
- Dim Czekaj As Word
- Cursor Off
- Cls
- Do
- Print "T23{013}{010}" ;
- 'zapisuje do slave T23$0d pytanie o pomiar T
- cls
- Locate 2 , 1
- lcd "1 T23 poszedl"
- 'wywolanie procedury odczytu znakow od slave
- Call Odczyt_zn
- Locate 1 , 1
- lcd Zm_lan
- wait 2
- lcd "2 T23 poszedl"
- 'Print "T04" ' 54 30 34 0D 0A
- Print "T23" ' 54 32 33 0D 0A
- Call Odczyt_zn
- 'wywolanie procedury odczytu znakow od slave
- Locate 1 , 1
- lcd Zm_lan
- Locate 3 , 1
- lcd "czekam 3s"
- Wait 3
- cls
- Loop
- End
- 'koniec programu
- Sub Odczyt_zn
- Czekaj = 0
- Zm_lan = ""
- Do
- Incr Czekaj
- Zn = Inkey()
- If Zn >= "0" And Zn <= "9" Then
- Zm_lan = Zm_lan + Zn
- End If
- Waitms 1
- Loop Until Zn = Chr(13) Or Czekaj > 100 'petla wykonywana az otrzymano znak CR (ascii 13)
- End Sub
