Seite 1 von 1

Daten senden geht nur , wenn ich Masse anklemme

Verfasst: 07.06.2010 13:37
von super_castle
Hallo, ich habe eine serielle Schittstelle vom USB-Port aus.
Wenn ich mit Purebasic Daten sende zum AVR-Board (2-Draht Rx und TX), muss ich zusätzlich einmal Masse legen vom Notebook(Blechhülle vom USB-Stecker) zum AVR-Board, sonst kommen keine Daten an.

Wenn ich dieses mal probehalber mit GFA32 mache, über den gleichen USB-Port, geht es ohne Masse.
Kann man in Purebasic irgendwie evtl ein seriellen Pin softwaremässig beeinflussen?

Code: Alles auswählen

Global text1.s,port.l,s_byte.c
 
  Enumeration
    #Window_0
    #Button_0
    #Button_1
    #Button_2
    #String_0
    #Editor_0
  EndEnumeration
      
  InitSprite()
  InitSound()
 
  OpenWindow(#Window_0, 400, 150, 800,500, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
  OpenWindowedScreen(WindowID(#Window_0),300,10,300,300,0,0,0)

  ButtonGadget(#Button_0, 10,10, 80, 25, "Seriell ein")
  ButtonGadget(#Button_1, 10,40, 80, 25, "Seriell aus")
  ButtonGadget(#Button_2, 10,70, 80, 25, "Daten")
  StringGadget(#String_0, 100, 10, 100, 22, "")
  EditorGadget(#Editor_0, 10, 140, 200,200)

  ClearScreen(RGB(128,128,128))
  port=-1
  
  Repeat
  Event = WaitWindowEvent()
  
  Select Event
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      
      If EventGadget = #Button_0 
        If port=-1
          port=OpenSerialPort(#PB_Any, "COM4", 19200, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
          If port
            text1+"...geöffnet   "+Str(port)+Chr(10)
            SetGadgetText(#Editor_0, text1)
          Else
            text1+"...nichts"+Chr(10)
            SetGadgetText(#Editor_0, text1)
            port=-1
          EndIf
        EndIf  
      EndIf
      
      If EventGadget = #Button_1 
        If port > 0
          CloseSerialPort(port)
          text1+"...geschlossen"+Chr(10)
          SetGadgetText(#Editor_0, text1)
          port=-1
        EndIf
      EndIf
      
      If EventGadget = #Button_2 
        If port > 0
          While AvailableSerialPortInput(port)  
            ReadSerialPortData(port, @s_byte, 1)
            text1+Str(s_byte)+Chr(10)
            SetGadgetText(#Editor_0, text1)
          Wend 
        EndIf  
      EndIf
      
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        Break
      EndIf
  EndSelect
  
  FlipBuffers()
   
ForEver

Re: Daten senden geht nur , wenn ich Masse anklemme

Verfasst: 07.06.2010 16:47
von 7x7
Ohne Masse gehts nun mal nicht in der Elektronik. Irgendwo und irgendwie gibt es in deiner Hardware-Verbindung eine Scheinmasse. Um eine einwandfreie sichere Verbindung aufzubauen, musst du eine definierte Masseverbindung herstellen.

Re: Daten senden geht nur , wenn ich Masse anklemme

Verfasst: 09.06.2010 18:45
von WPö
super_castle hat geschrieben:(2-Draht Rx und TX)
Hä? Erzähl' nochmal! Verwendest Du eine selbstgebastelte Leitung, aus zwei Drähten bestehend?

Gruß - WPö

Re: Daten senden geht nur , wenn ich Masse anklemme

Verfasst: 20.06.2010 22:49
von super_castle
Zur Zeit mit dem Atmega-Board ja.
Weil Purebasic zwischenpuffert ist es kein Problem, da brauche ich keine Abfrageleitung und Bestätigungsleitung, obwohl das mit dem Atmega-Board eigentlich auch sehr einfach ist, 2 zusätzliche Leitungen zu Benutzen.

Re: Daten senden geht nur , wenn ich Masse anklemme

Verfasst: 20.06.2010 23:03
von WPö
Alder, was erwartest Du?

Du MUSZT in jedem Fall eine Masseleitung verwenden, damit es einen Potentialunterschied gibt (oder ein Strom fließen kann) für RxD und/oder TxD. Alles, was sonst funktioniert, is reiner Zufall und gerademal an der Zerstörung oder Beschädigung der RS232-Ein- und -Ausgänge vorbeigegangen!

Gruß - WPö