ATmega32 - Bascom - RS485

Zdravím, již se pár dní trápím s propojením 2 Atmeg pomocí RS485… mám 2 kity EvB 4.3 v4 propojené viz. Obr1, nevím zda-li můj problém již není zde a jeden program, kterých jsem tam nahrál mohl již fungovat, proto připojuji i zapojení. Ale spíše hledám softwarovou chybu v těchto programech:

Obr.1 -http://www.jpeg.cz/obrazek/eRkS

Master:

$lib “modbus.lbx” 'použité knihovny
$regfile = “m32def.dat” 'použitý mikroprocesor
$crystal = 16000000 'nastavení krystalu
$baud = 9600 'nastavení baudové rychlosti
$hwstack = 42 'nastavení HW stacku
$swstack = 40 'nastavení SW stacku
$framesize = 40 'nastavení velikosti rámce

'Zapojeni LCD pinu do mikrokontroleru
’ Rs = PortC.2
’ E = PortC.3
'Db4 = PortC.4
'Db5 = PortC.5
'Db6 = PortC.6
'Db7 = PortC.7

'Zapojení sériové linky
'DI = PortB.3
'R0 = PortB.2
'RE/DE = PortB.1

'Zapojení ostatních pinů do microkontroleru
'DS18B20(levý pin) = PortC.1
'Červená led(signál ohřívání) = PortA.0
'Zelená led(signál chlazení) = PortA.1

'RS485
Config Print1 = Portb.1 , Mode = Set 'konfigurace UARTu na RS485 a nastavení směru vysílání
Rs485dir Alias Portb.1 'abstrakce pinu sériové linky
Config Rs485dir = Output 'nastavení pinu na výstupní
Rs485dir = 1 'nastavení halfduplexu na transtmit/recieve
Config Com1 = Dummy , Synchrone = 0 , Parity = Even , Stopbits = 1 , Databits = 8 , Clockpol = 0 'nastavení master - slave musí být stejný
'RS485

Config Lcdpin = Pin , Rs = Portc.2 , E = Portc.3 , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 'určení pinů pro komunikaci s LCD
Config Lcd = 16 * 2 'konfigurace řádků

Config 1wire = Portc.1 'konfigurace pripojeni teplotniho cidla DS18B20
Config Porta.0 = Output 'konfugurace I/O pinů
Config Porta.1 = Output

Cool Alias Porta.0 'abstrakce pinu pro chlazení
Set Cool 'zhasnutí LED kontrolky
Heat Alias Porta.1 'abstrakce pinu pro přitápění
Set Heat 'zhasnutí LED kontrolky

'nastavení dimenzí pro proměnné
Dim Temp(8) As Word
Dim X As Word
Dim Celsius As Integer
Dim T As Single
Dim S As String * 8 , S1 As String * 8
S = “08.03.11”
'začátek exekutivní části
Cls 'reset displaye
Locate 1 , 1 'alokace kurzoru/zápisu na první řádek
Lcd “Janos Schiebel” 'podpis pracovníků
Locate 2 , 1 'alokace kurzoru/zápisu na druhý řádek
Lcd “Termostat s AT8” 'zadání práce
Wait 2 'čekání

Cls 'reset displaye
Locate 1 , 1 'alokace kurzoru/zápisu na první řádek
Lcd “Teplota” 'informace o významu 2. řádku

Cursor Off 'vypnutí kurzoru

Do 'nekonečná smyčka

1wreset 'resetování busu
1wwrite &HCC 'přeskočení ROM paměti
1wwrite &H44 'převeď na teplotu

Waitms 200 'čekání

1wreset 'resetování busu
1wwrite &HCC 'přeskočení ROM paměti
1wwrite &HBE 'příchod čtení

For X = 1 To 2 'uložení čtení do pole
Temp(x) = 1wread()
Next

Celsius = Makeint(temp(1) , Temp(2)) 'převedení z pole do proměnné
T = Celsius / 16 'převod z hexa
Locate 2 , 1 'alokace kurzoru/zápisu na druhý řádek
Lcd Fusing(t , “##.##”) + " C" 'fůzování proměnné T na LCD display

If T > 27 Then Heat = 0 'kontrola podchlazení -> zapnutí vyhřívání
If T < 28 Then Cool = 0 'kontrola přehřátí -> zapnutí chlazení
If T > 27 And T < 28 Then 'v případě přípustné odchylky od nastavené teploty vypnout
Set Heat
Set Cool
End If

Rs485dir = 1 'poslání dat RS485
Print Celsius
Waitms 500
Print S
Loop 'skočení zpátky do smyčky
End

Slave:
$lib “modbus.lbx”
$regfile = “m32def.dat” ’ slave
$crystal = 16000000
$hwstack = 42
$swstack = 40
$framesize = 40
$baud = 9600

Config Lcdpin = Pin , Rs = Portc.2 , E = Portc.3 , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7
Config Lcd = 16 * 2

Cls
Cursor Off

Dim T As Single
Dim Celsius As Integer

Config Print1 = Portb.1 , Mode = Set
Rs485dir Alias Portb.1
Config Rs485dir = Input
Rs485dir = 0

Config Com1 = Dummy , Synchrone = 0 , Parity = Even , Stopbits = 1 , Databits = 8 , Clockpol = 0

Do

Locate 1 , 1
Lcd “Teplota”
Celsius = “”
Input Celsius
T = Celsius / 16 'převod z hexa
Locate 2 , 1 'alokace kurzoru/zápisu na druhý řádek
Lcd Fusing(t , “##.##”) + " C" 'fůzování proměnné T na LCD display
Waitms 200
Loop
End

Za pomoc předem děkuji, už jsem z toho na větvi

Poté propojím obě desky jen jedním kabelem pokud nepotřebuji žádné odezvy od slave (propojím A a B v jeden vodič zelenou spojkou na obrázku) a poté stačí pouze do jedné ze svorkovnic kabel a protáhnout do druhé ? Jsem v tomto naprostý laik proto prosím o klid a mír v duši při reakcích :smiley:

Poprosím ťa, výpis programu dávaj do CODE … lepšie sa v tom potom orientuje…