Liste der Anhänge anzeigen (Anzahl: 1)
Master Slave Verbindung mit AVR2313 und 485-Bustreibern ?
Hallo zusammen,
bin gerade dabei ein 485-Bussystem bei mir aufzubauen (siehe Tiffs und Bas-Dateien im Anhang), der Controller-Aufbau funktioniert auch den ich hab bereits mit einem Lauflicht-Programm die Funktion getestet.
Wenn ich aber die Aktor und Sensorsoftware einspiele wie im Anhang geht im Moment nichts. Ich versteh auch nicht ganz wie das Ganze funktioniert also der Aktor hört in die Leitung und reagiert wenn eine passende Zeichenkette empfangen wird ?
Beim Sensor hab ich an Pin13 PB1 einen Taster angeschlossen der die Masse durchschaltet. Beim Aktor hab ich an Pin13 PB1 eine Leuchtdiode
angeschlossen gegen +5V, diese geht auch mittels Lauflicht-Programm
getestet.
Bei beiden Controllern ist das FuseBit über Bascom auf External gesetzt,
2xWiderstände 120Ohm Kabelanfang und Ende + 1x 4,7k gegen GBD + VCC an den Buskanälen A / B.
Wenn ich mittels Multimeter auf dem Bus messe tut sich auch was beim Taster drücken, es wird wohl schon etwas gesendet aber wohl nicht das Richtige !
Bei der Befehlsstelle versteh ich nicht ganz welche Kombination an den Dipschaltern eingestellt werden muß, PD6 Pin11 hat kein Potential wenn ich messe somit kann er auch nichts über die Dipschalter weitergeben (deshalb hab ich den Taster mal auf Masse gelegt).
Dann ist da noch ein Anschluß PD5 Pin9 K1 weiß nicht welche Funktion das hat sollen nun +5V draufgeschaltet werden oder nicht ?
Bei der Software sieht es so aus als ob etwas gesendet und dieses dann noch mal bestätigt wird, der Ablauf scheint mir etwas sehr kompliziert.
Würde es nicht reichen ich stelle den einen Controller fest auf Empfang und den anderen fest auf senden und schicke nur einen Buchstaben und sage dann höre in den Bus hinein wenn String A kommt schalte Port PB0 auf high, wenn noch einmal String A kommt schalte Port PB0 wieder auf low, und selbes wenn String B kommt dann Port PB1, String C Port PB2 usw. Ein ganz einfacher Code wenn möglich.
Die Schwierigkeit im Moment liegt bei der Software die vom Sensor zum Aktor wohl nicht ganz zusammen passt, bzw. mir die Funktion nicht ganz klar ist.
Könntet Ihr mir da noch mal auf die Sprünge helfen und kurz darüber schauen wie die Software zusammenpasst, die Funktion sollte so sein das bei Tastendruck am Eingang Pin13 PB1/Sensor am Ausgang Pin13 PB1/Aktor dieser an geht, beim nächsten Tastendruck aus, dies für alle Ein/Ausgänge des Ports gleich.
Schon mal vielen Dank im Vorraus !
Gruß, Jürgen
Liste der Anhänge anzeigen (Anzahl: 1)
Bascom Hilfe:
CONFIG PRINT
Top Previous Next
Action
Configure the UART to be used for RS-485
Syntax
CONFIG PRINT0 = pin
CONFIG PRINT1 = pin
Remarks
pin
The name of the PORT pin that is used to control the direction of an RS-485 driver.
mode
SET or RESET
Use PRINT or PRINT0 for the first serial port. Use PRINT1 for the second serial port.
When you use RS-485 half duplex communication you need a pin for the direction of the data. The CONFIG PRINT automates the manual setting/resetting. It will either SET or RESET the logic level of the specified pin before data is printed with the BASCOM print routines. After the data is sent, it will inverse the pin so it goes into receive mode.
You need to set the direction of the used pin to output mode yourself.
See also
CONFIG PRINTBIN
Code:
Example
'------------------------------------------------------------------------------
'name : rs485.bas
'copyright : (c) 1995-2006, MCS Electronics
'purpose : demonstrates
'micro : Mega48
'suited for demo : yes
'commercial addon needed : no
'------------------------------------------------------------------------------
$regfile = "m48def.dat" ' we use the M48
$crystal = 8000000
$baud = 19200
$hwstack = 32
$swstack = 32
$framesize = 32
Config Print0 = Portb.0 , Mode = Set
Config Pinb.0 = Output 'set the direction yourself
Dim Resp As String * 10
Do
Print "test message"
Input Resp ' get response
Loop
in den Plänen hab ich auch mal rumgepinselt ... siehe Anhang
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat von Vitis
...
a=waitkey()
printbin a
...
einfacher gehts nicht.
Vorsicht, PRINTBIN unterstützt die automatische Sende/Empfangs-Umschaltung nicht, wie im Anhang zu sehen ist.
MFG
Screwdriver
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
beim Anschluß eines zweiten Sensor-Moduls hab ich festgestellt das es nicht richtig läuft bzw. der Aktor-Controller stürzt nach kurzer Zeit ab.
Nehme ich den zusätzlichen Sensor wieder weg vom Bus funktioniert wieder alles !
Die Hardware hab ich schon sehr genau geprüft ist ok, ich glaube fast es ist ein Softwareproblem des Sensors, kann es sein das beim Anschluß des zweiten Sensors, beide nicht mehr richtig senden können ?
Vielleicht hat jemand einen Tip woran es liegen könnte !
Mfg Jürgen
Code:
'Sensor
$regfile = "attiny2313.dat"
$crystal = 3579545
$baud = 4800
Portb = &B11111111
Portd = &B1100000 'PullUp
$hwstack = 32
$swstack = 10
$framesize = 40
Config Print = Portd.2 , Mode = Set
Config Pind.2 = Output
Config Debounce = 30
Waitms 300
Do
Debounce Pinb.0 , 0 , Schalter1 , Sub
Debounce Pinb.1 , 0 , Schalter2 , Sub
Debounce Pinb.2 , 0 , Schalter3 , Sub
Debounce Pinb.3 , 0 , Schalter4 , Sub
Debounce Pinb.4 , 0 , Schalter5 , Sub
Debounce Pinb.5 , 0 , Schalter6 , Sub
Debounce Pinb.6 , 0 , Schalter7 , Sub
Debounce Pinb.7 , 0 , Schalter8 , Sub
Loop
Schalter1:
Print "!10";
Return
Schalter2:
Print "!11";
Return
Schalter3:
Print "!12";
Return
Schalter4:
Print "!13";
Return
Schalter5:
Print "!14";
Return
Schalter6:
Print "!15";
Return
Schalter7:
Print "!16";
Return
Schalter8:
Print "!17";
Return
End
Code:
'Aktor
$regfile = "attiny2313.dat"
$crystal = 3579545
$baud = 4800
Dim A As String * 5
Dim Z As String * 1
Dim B As String * 5
Dim C As Byte
Dim B0 As Integer
Dim B1 As Integer
Dim B2 As Integer
Dim B3 As Integer
Dim B4 As Integer
Dim B5 As Integer
Dim B6 As Integer
Dim B7 As Integer
$hwstack = 32
$swstack = 10
$framesize = 40
Config Serialin = Buffered , Size = 6
Config Portb = Output
Enable Interrupts
Portd.2 = 0
B0 = 6000
B1 = 6000
B2 = 32000
B3 = 32000
B6 = 2
B7 = 2
Do
C = Ischarwaiting()
If C = 1 Then
C = Inkey()
A = A + Chr(c)
End If
If Len(a) > 2 Then
B = A
Z = Mid(a , 1 , 1 )
End If
If Z = "!" Then
B = Mid(a , 1 , 5)
End If
' 6x von einander unabhängige Comfort Zeitschaltungen 2x Stromstoßschaltungen
' Achtung Zähler Integer nur bis 32700
If B = "!10" Then 'Comfort Zeitschaltung kurz Ein - Aus wie Tasterschaltung
If Portb.0 = 0 Then
Set Portb.0
B0 = 6000
Else
Reset Portb.0
End If
A = ""
End If
If B = "!11" Then 'Comfort Zeitschaltung kurz Ein - Aus wie Tasterschaltung
If Portb.1 = 0 Then
Set Portb.1
B1 = 6000
Else
Reset Portb.1
End If
A = ""
End If
If B = "!12" Then 'Comfort Zeitschaltung Lang Ein - Aus wie Tasterschaltung
If Portb.2 = 0 Then
Set Portb.2
B2 = 32000
Else
Reset Portb.2
End If
A = ""
End If
If B = "!13" Then 'Comfort Zeitschaltung Lang Ein - Aus wie Tasterschaltung
If Portb.3 = 0 Then
Set Portb.3
B3 = 32000
Else
Reset Portb.3
End If
A = ""
End If
If B = "!14" Then 'Stromstoßschaltung
If Portb.4 = 0 Then
Set Portb.4
Else
Reset Portb.4
End If
A = ""
End If
If B = "!15" Then 'Stromstoßschaltung
If Portb.5 = 0 Then
Set Portb.5
Else
Reset Portb.5
End If
A = ""
End If
If B = "!16" Then 'Comfort Zeitschaltung kurzer Impuls für externe Ansteuerung
If Portb.6 = 0 Then
Set Portb.6
B6 = 2
Else
Reset Portb.6
End If
A = ""
End If
If B = "!17" Then 'Comfort Zeitschaltung kurzer Impuls für externe Ansteuerung
If Portb.7 = 0 Then
Set Portb.7
B7 = 2
Else
Reset Portb.7
End If
A = ""
End If
If B = "!18" Then 'Funktion Zentral Ein
Set Portb.0
Set Portb.1
Set Portb.2
Set Portb.3
Set Portb.4
Set Portb.5
Set Portb.6
Set Portb.7
A = ""
End If
If B = "!19" Then 'Funktion Zentral Aus
Reset Portb.0
Reset Portb.1
Reset Portb.2
Reset Portb.3
Reset Portb.4
Reset Portb.5
Reset Portb.6
Reset Portb.7
A = ""
End If
Decr B0
If B0 = 0 Then
Reset Portb.0
B0 = 6000
End If
Decr B1
If B1 = 0 Then
Reset Portb.1
B1 = 6000
End If
Decr B2
If B2 = 0 Then
Reset Portb.2
B2 = 32000
End If
Decr B3
If B3 = 0 Then
Reset Portb.3
B3 = 32000
End If
Decr B6
If B6 = 0 Then
Reset Portb.6
B6 = 2
End If
Decr B7
If B7 = 0 Then
Reset Portb.7
B7 = 2
End If
Waitms 20 '10 bis max 20 ms
Loop
End
[/code]