xlostx
23.03.2006, 00:02
Hallo leute!
Habe 2 atmeg8535 mittels txd ind rxd pins verbunden und möchte das der zweite daten an den ersten übergibt um diese auf einem lcd display anzuzeigen.
Haut auch fast hin, nur irgendwie verändert sich die zahl nicht es steht immer zehn und es flakert.
Ich habe den 2ten von txd zum ersten mit rxd verkabelt, beide funktionieren und erfüllen ihre programme bis auf die übertragung.
Ich poste mal die 2 codes vielleicht hat mal wer bock, schnell zu schauen was da nicht funkt.
Kurze programm beschreibung:
Ein chip der 1te hängt am display und hat eine temperaturauswertung und noch andere adc aufgaben die noch programmiert werden, der 2te soll am eingang anliegende impulse an 24 relaise der reihenfolge rauf oder runter schalten ( dient zur steuerung der lautstärke einer endstufe), alles is mal grob ausprogrammiert zum simulieren.
Der wert X (ein array) is der wert der sich verändern kann (lautstärke , zahl von 1 bis 24 ), und dieser zustand soll angezeigt werden am display.
Code 1 vom chip der empfängt und am display hängt:
$regfile = "8535def.dat"
$crystal = 4000000
$baud = 9600
Config Pinb.0 = Output
Config Pinb.1 = Output
Config Pinb.2 = Output
Config Pinb.3 = Output
Config Pinb.4 = Output
Config Pinb.5 = Output
Config Pinb.6 = Output
Config Pinb.7 = Output
Config Pind.0 = Input
Config Pind.1 = Output
Config Pind.2 = Output
Config Pind.3 = Output
Config Pind.4 = Output
Config Pind.7 = Output
Config Pina.1 = Input
Config Pina.2 = Input
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.2 , Rs = Portc.0
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Cursor Off
Start Adc
Dim Temp As Single
Dim A As Single
Dim Volt As Word
Dim B As Single
Dim C As Single
Dim D As Single
Dim Volta1 As Word
Dim Rxd_eingang As Byte
Cls
Upperline
Lcd "Hallo Welt"
Lowerline
Lcd " LO.GO "
Waitms 90
Cls
Do
Volt = Getadc(0)
A = Volt * 5
Temp = A / 10.24
Locate 1 , 1
Lcd "T:" ; Fusing(temp , "#.") ; Chr(223) ; "C" ;
Volta1 = Getadc(1)
C = Volta1 * 5
D = C / 1024
Lowerline
Lcd "Porta1:" ; Fusing(d , "#.##") ; "V"
If Ischarwaiting() = 1 Then Gosub Empfang
Locate 1 , 10
Lcd "Vol:" ; Rxd_eingang ; " " 'hier soll der X wert vom 2ten chip zur anzeige kommen , geht aber nicht ganz,der wert verändert sich nicht bei aktionen des 2ten chips????
Loop
Empfang:
Rxd_eingang = Inkey()
Return
Code 2 vom chip der zum ersten schickt:
$regfile = "8535def.dat"
$crystal = 4000000
$baud = 9600
Config Pinb.0 = Output
Config Pinb.1 = Output
Config Pinb.2 = Output
Config Pinb.3 = Output
Config Pinb.4 = Output
Config Pind.1 = Output
Config Pind.2 = Output
Config Pind.3 = Output
Config Pind.4 = Output
Config Pind.5 = Output
Config Pind.6 = Output
Config Pina.1 = Input
Config Pina.2 = Input
Porta.1 = 1
Porta.2 = 1
Portb.0 = 1
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1
Portb.4 = 1
Portd.2 = 1
Portd.3 = 1
Portd.4 = 1
Portd.5 = 1
Portd.6 = 1
Led1 Alias Portb.0
Led2 Alias Portb.1
Led3 Alias Portb.2
Led4 Alias Portb.3
Led5 Alias Portb.4
Led6 Alias Portd.2
Led7 Alias Portd.3
Led8 Alias Portd.4
Led9 Alias Portd.5
Led10 Alias Portd.6
I1 Alias Pina.1
I2 Alias Pina.2
Dim X As Integer
X = 0 'Dieses X will ich auf den ersten chip übertargen und der soll dann am lcd display angezeigt werden, wechselt natürlich ständig
Do
If I1 = 0 Then
X = X + 1
Print X
End If
If I2 = 0 Then
X = X - 1
Print X
End If
If X = 1 Or X = 0 Then
Led1 = 0 : X = 1
Print 01
Else
Led1 = 1
End If
If X = 2 Then
Led2 = 0
Print 02
Else
Led2 = 1
End If
If X = 3 Then
Led3 = 0
Print 03
Else
Led3 = 1
End If
If X = 4 Then
Led4 = 0
Print 04
Else
Led4 = 1
End If
If X = 5 Then
Led5 = 0
Print 05
Else
Led5 = 1
End If
If X = 6 Then
Led6 = 0
Print 06
Else
Led6 = 1
End If
If X = 7 Then
Led7 = 0
Print 07
Else
Led7 = 1
End If
If X = 8 Then
Led8 = 0
Print 08
Else
Led8 = 1
End If
If X = 9 Then
Led9 = 0
Print 09
Else
Led9 = 1
End If
If X = 10 Or X = 11 Then
Led10 = 0 : X = 10
Print 10
Else
Led10 = 1
End If
Waitms 30
Loop
Danke schon mal ,ein jeder tipp oder ratschlag wird gerne angenommen....DANKE[/code]
Habe 2 atmeg8535 mittels txd ind rxd pins verbunden und möchte das der zweite daten an den ersten übergibt um diese auf einem lcd display anzuzeigen.
Haut auch fast hin, nur irgendwie verändert sich die zahl nicht es steht immer zehn und es flakert.
Ich habe den 2ten von txd zum ersten mit rxd verkabelt, beide funktionieren und erfüllen ihre programme bis auf die übertragung.
Ich poste mal die 2 codes vielleicht hat mal wer bock, schnell zu schauen was da nicht funkt.
Kurze programm beschreibung:
Ein chip der 1te hängt am display und hat eine temperaturauswertung und noch andere adc aufgaben die noch programmiert werden, der 2te soll am eingang anliegende impulse an 24 relaise der reihenfolge rauf oder runter schalten ( dient zur steuerung der lautstärke einer endstufe), alles is mal grob ausprogrammiert zum simulieren.
Der wert X (ein array) is der wert der sich verändern kann (lautstärke , zahl von 1 bis 24 ), und dieser zustand soll angezeigt werden am display.
Code 1 vom chip der empfängt und am display hängt:
$regfile = "8535def.dat"
$crystal = 4000000
$baud = 9600
Config Pinb.0 = Output
Config Pinb.1 = Output
Config Pinb.2 = Output
Config Pinb.3 = Output
Config Pinb.4 = Output
Config Pinb.5 = Output
Config Pinb.6 = Output
Config Pinb.7 = Output
Config Pind.0 = Input
Config Pind.1 = Output
Config Pind.2 = Output
Config Pind.3 = Output
Config Pind.4 = Output
Config Pind.7 = Output
Config Pina.1 = Input
Config Pina.2 = Input
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.2 , Rs = Portc.0
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Cursor Off
Start Adc
Dim Temp As Single
Dim A As Single
Dim Volt As Word
Dim B As Single
Dim C As Single
Dim D As Single
Dim Volta1 As Word
Dim Rxd_eingang As Byte
Cls
Upperline
Lcd "Hallo Welt"
Lowerline
Lcd " LO.GO "
Waitms 90
Cls
Do
Volt = Getadc(0)
A = Volt * 5
Temp = A / 10.24
Locate 1 , 1
Lcd "T:" ; Fusing(temp , "#.") ; Chr(223) ; "C" ;
Volta1 = Getadc(1)
C = Volta1 * 5
D = C / 1024
Lowerline
Lcd "Porta1:" ; Fusing(d , "#.##") ; "V"
If Ischarwaiting() = 1 Then Gosub Empfang
Locate 1 , 10
Lcd "Vol:" ; Rxd_eingang ; " " 'hier soll der X wert vom 2ten chip zur anzeige kommen , geht aber nicht ganz,der wert verändert sich nicht bei aktionen des 2ten chips????
Loop
Empfang:
Rxd_eingang = Inkey()
Return
Code 2 vom chip der zum ersten schickt:
$regfile = "8535def.dat"
$crystal = 4000000
$baud = 9600
Config Pinb.0 = Output
Config Pinb.1 = Output
Config Pinb.2 = Output
Config Pinb.3 = Output
Config Pinb.4 = Output
Config Pind.1 = Output
Config Pind.2 = Output
Config Pind.3 = Output
Config Pind.4 = Output
Config Pind.5 = Output
Config Pind.6 = Output
Config Pina.1 = Input
Config Pina.2 = Input
Porta.1 = 1
Porta.2 = 1
Portb.0 = 1
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1
Portb.4 = 1
Portd.2 = 1
Portd.3 = 1
Portd.4 = 1
Portd.5 = 1
Portd.6 = 1
Led1 Alias Portb.0
Led2 Alias Portb.1
Led3 Alias Portb.2
Led4 Alias Portb.3
Led5 Alias Portb.4
Led6 Alias Portd.2
Led7 Alias Portd.3
Led8 Alias Portd.4
Led9 Alias Portd.5
Led10 Alias Portd.6
I1 Alias Pina.1
I2 Alias Pina.2
Dim X As Integer
X = 0 'Dieses X will ich auf den ersten chip übertargen und der soll dann am lcd display angezeigt werden, wechselt natürlich ständig
Do
If I1 = 0 Then
X = X + 1
Print X
End If
If I2 = 0 Then
X = X - 1
Print X
End If
If X = 1 Or X = 0 Then
Led1 = 0 : X = 1
Print 01
Else
Led1 = 1
End If
If X = 2 Then
Led2 = 0
Print 02
Else
Led2 = 1
End If
If X = 3 Then
Led3 = 0
Print 03
Else
Led3 = 1
End If
If X = 4 Then
Led4 = 0
Print 04
Else
Led4 = 1
End If
If X = 5 Then
Led5 = 0
Print 05
Else
Led5 = 1
End If
If X = 6 Then
Led6 = 0
Print 06
Else
Led6 = 1
End If
If X = 7 Then
Led7 = 0
Print 07
Else
Led7 = 1
End If
If X = 8 Then
Led8 = 0
Print 08
Else
Led8 = 1
End If
If X = 9 Then
Led9 = 0
Print 09
Else
Led9 = 1
End If
If X = 10 Or X = 11 Then
Led10 = 0 : X = 10
Print 10
Else
Led10 = 1
End If
Waitms 30
Loop
Danke schon mal ,ein jeder tipp oder ratschlag wird gerne angenommen....DANKE[/code]