-         

Ergebnis 1 bis 6 von 6

Thema: Serielle Verbindung 2er Atmeg8535 ????

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    15.03.2006
    Beiträge
    11

    Serielle Verbindung 2er Atmeg8535 ????

    Anzeige

    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:

    Code:
    $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:

    Code:
    $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]

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    15.03.2006
    Beiträge
    11
    Na kommt nur ein kleiner tipp ; danke!

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.02.2006
    Beiträge
    164
    print x ?

    muss dass nicht printbin x heißen ?

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    29
    Beiträge
    470
    Ich hab dir ein paar Tips:

    1. Arbeite bitte mit dem DDRX-Registern, dass mit deinem Config Pinb.X = Out/Input frist in Bascom dermasen speicherplatz!!!
    Benutze zb für Pind.5-7 ausgang => DDRB = 0b11100000; Da brauste für 8Pins nur eine befehl.

    2. Wenn du Ports setzen willst ( einzelne Pins am ANFANG! ) wie hier:
    Portd.2 = 1
    Portd.3 = 1
    Portd.4 = 1
    Portd.5 = 1
    Portd.6 = 1

    benutze den Befehl PortX = ... hier macht das:
    Portd = 0b01111100

    3. Nettes Programm

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    15.03.2006
    Beiträge
    11
    He danke mal die tipps sind gut, das mit den ports wird gleich gemacht....
    Das mit dem printbin x , also was is da anders oder besser?

    Aber warum krieg ich keine verbindung zusammen mit den 2 microcontrollern ??? Oder hab ich eh eine nur wie kann ich es testen ??

    lg danke soweit!

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    29
    Beiträge
    470
    Was ich jetzt mal als dein "Problem" ansehe, ist, dass dein Code schon recht mächtig ist und du eigentlich ja dein Primärziel ( 2 AVR mit UART verbinden ) so nur schwer erreichen wirst. schreibe die mal ein kleines Programm in die 2 AVRs und zwar das zb. der Mster immer alle sekunde ein Zeichen zum anderen schick und bei sich eine LED anschalten / asuschalten soll, der 2. AVR soll bei Signaleingan eine LED Leuchten lassen und wenn das Siganl die richtigen DAten enthält eine Andere, so kannst du schonmal ermitteln wo dein Problem liegt.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •