Bitte um Prüfung meiner Schaltung

Hallo Spelli,

bitte beachte, dass der USART1 des ATmega128 auf dem Mikrocontrollermodul an RXD/TXD des Silabs CP2102 angeschlossen ist. Du hast im Moment TXD des GPS-Moduls an RXD1 des Mikrocontrollers angeschlossen.

Gruß,
Dirk
 
Hallo Dino, hallo Dirk,

danke, dass ihr euch die Zeit genommen habt, meinen Schaltplan anzuschauen.
Ich habe mir den Plan ausgedruckt und die 6 Seiten zusammengeklebt! ;-)

Bzgl. des OPAmp:
wenn ich es richtig verstanden habe müsste RG bzw. R4 dann 100K groß sein? Laut Table 5/Page 16 des Datenblatts (reichelt; AD623A) wäre das ein Gain von 2!?


Bzgl. des USART1:
da habe ich überlegt und bin zu dem Entschluss gekommen (???), dass es unproblematisch sei, da ich vermutete, dass dort nur etwas kommt, wenn der USB-Anschluss gegeben ist.
Den USB Port möchte ich nicht nutzen.

Oder muss ich die Verbindung physikalisch trennen, damit es nicht zu Problemen kommt und ich die GPS Daten über RXd1 bekomme!?

Danke und angenehmen abend!

Christoph
 
Hallo Christoph,

ich würde das Signal vom CP2102 zum RXD1 des ATmega128 trennen. Leider ist eine Trennung über Lötbrücke bei dem Modul noch nicht vorgesehen, bei dem größeren MEGA2560-USB kann man das besser konfigurieren. Falls du trennen möchtest und ein Bildchen benötigst, lass es mich wissen.

Gruß,
Dirk
 
Hallo Dirk,

ich muss zugeben, dass ich am Anfang zwar drüber nachgedacht aber nicht nachgefragt hab!

Würde es denn Probleme geben, wenn kein USB angeschlossen ist (ist auch nicht vorgesehen)?
Wenn ja, würde ich trennen, ich brauch das GPS Signal.

Wenn nein, würde ich es so erstmal lassen...

Danke,
Christoph
 
Hallo Christoph,

möglicherweise funktioniert es auch so, ich würde das Signal aber trennen. Es geht auch ziemlich einfach, siehe angehäntes Bild.

Entweder die Leiterbahn zwischen den Vias auf Bottom trennen (kannst du relativ schnell wieder herstellen, wenn du die Vias verbindest),
oder die eine Via etwas aufbohren. Siehe gelbe Pfeile.

Gruß,
Dirk

PD2_trennen.png
 
Hi,

Würde es denn Probleme geben, wenn kein USB angeschlossen ist (ist auch nicht vorgesehen)?
Wenn ja, würde ich trennen, ich brauch das GPS Signal.
Auch wenn kein USB angeschlossen ist wird ein definierter Pegel am Ausgang des CP2102 liegen. Wenn es so ist wie es sein soll wirst du ein High-Signal erwarten können. Der CP2102 zieht dir den RxD also auf Vcc. Wenn der GPS-Empfänger am selben Pin hängt und einer aus High liegt und der andere unbedingt Low haben möchte dann gewinnt irgendwann der stabilere (der andere ist dann irgendwann hinüber). Wenn beide Ausgänge etwas weicher im Ausgangstreiber sind geht zwar nix hinüber aber sie einigen sich dann bei der Hälfte von Vcc. Das ist für den Eingang des Atmels natürlich kein definierter High oder Low-Pegel mehr.

Ich hab bei mir den CP2102 drangelassen. Der USB-Port wird dann normal für Datentransfer oder für Debugging verwendet. Der andere UART ist ja auch noch frei und notfalls kann man für etwas Kleinkram noch nen Software-UART aufziehen. Bei meinem brauche ich zB einmal den USB mit CP2102, dann den zweiten Hardware-UART für den LIN-Bus und dann noch nen Software-UART als Eingang für nen RFID-Reader.

Wenn du die Anzahl der Pins unbedingt benötigst dann geht wohl kein Weg drum rum die Leiterbahnen zu trennen. Sonst würde ich den USB als Debugging/Status-Schnittstelle lassen und den zweiten UART bzw eine dritte Softwareschnittstelle aufmachen.

So ein GPS-Modul ist mit seinen paar Kilobaud (1200 oder 2400 ?) nicht grade der Performancefresser und gegenüber deinem ursprünglich geplanten Mega8 ist die Anzahl der IO-Ports schon nen gewaltiger Sprung (mehr als das doppelte).

Grade wegen dem bereits integrierten USB-COM-Port ist das Modul eigentlich recht interessant weil es einem ne Menge Bastelarbeit abnimmt.

Gruß
Dino
 
Hallo,

ich muss zugeben, dass ich das USB-Board noch nicht auf dem Steckbrett hatte bzw. getestet hatte. Pins habe ich noch frei, allerdings konnte ich die Problemstellung mit dem Software Uart nicht lösen (mein anderer Beitrag hierzu). Dann hatte ich gehofft mit den beiden Hardware Uarts besser zurecht zu kommen (aber noch nicht auf dem Steckbrett getestet...).
Ein Debugging wäre natürlich super. Das GPS Modul benötigt 9600 Baud.

Danke,
Christoph
 
allerdings konnte ich die Problemstellung mit dem Software Uart nicht lösen
im Projektbereich hat Markus oder Knickohr (einer von beiden) ne Zisternenanzeige gebaut. Da ist auch nen Software-UART drin verwendet. Sie dir mal an wie es da gemacht ist. Wär jetzt mal nen Tip. Das ist immer recht gut dokumentiert.
 
Hallo,

nach langer Unterbrechung (Familie, Haus und Hund) konnte ich mich endlich wieder meiner Schaltung widmen.

Unten angefügt ist der aktuelle Code (z. Z. noch auf einem ATmega8).

Das Problem der UARTs bestand so gar nicht. Nach langer Zeit wird irgendwann die Höhe angezeigt... Es scheint nur lange zu dauern.
Zusätzlich konnte ich auch einen DS18B20Z einbinden.

Nun wollte ich ein Servo (als Tilt-Servo gedacht, gespeisst über 7,4 Volt, angesteuert über 5 Volt vom ATmega8) ansprechen. Da gibts aber ein Problem, nur aufgrund der "Config Servos" fängt der schon an zu surren und ich habe zum Beispiel beim DS18B20Z keinen richtigen Wert mehr...

Liegt das daran, dass der Servo mit 7,4 Volt gespeist, angesteuert aber über die 5 V vom ATmega8 wird??

Danke und Gruß
Christoph

P.S.: habe die Schaltung nun komplett auf meinem Steckbrett und werde mich auch bald mit dem MPX4115A beschäftigen...


Code:
$regfile = "m8def.dat"
$crystal = 7372800                                          ' 7,3728 Mhz Quarzoszillator an PB6 / XTAL 1
$hwstack = 32
$swstack = 32
$framesize = 32


Pwr_all Alias Portd.2                                       'Abschaltung der Servos und LM2675 (5V für GPS, Video 5,8 GHz Tx)
Pwr_gps Alias Portd.5
Pwr_video Alias Portd.6

Piezo Alias Portd.4


'Variablen
Dim Spannung As Word
Dim Zellspannung_orig As Single
Dim Zellspannung As String * 5


Dim Quittierung As String * 21
Dim Gpshoehe As String * 5

Dim Gps_zeichen As Byte
Dim Gpsdaten As String * 98
Dim Gps_header As String * 6
Dim Gps_anzahl As Byte
Dim Gps_teilstring(14) As String * 12
Dim Gps_hoehenteilstring(2) As String * 8


Dim Befehls_zeichen As Byte
Dim Befehlsdaten As String * 101
Dim Befehls_header As String * 6
Dim Befehls_anzahl As Byte
Dim Befehls_teilstring(5) As String * 21


Dim Temp(9) As Byte
Dim X As Byte
Dim Celsius As Integer
Dim T As Single
Dim Temperatur As String * 5


Dim S1_winkel As Byte



Const Adc_multi = 0.0048828125                              ' = 5.0 / 1024.0 -> ADC auflösen
Pwr_all = 1                                                 ' bei Systemstart Peripherie auf ON
Pwr_gps = 1
Pwr_video = 1


'Portkonfiguration / Initialisierung
Config Pwr_all = Output
Config Pwr_gps = Output
Config Pwr_video = Output


Config 1wire = Portd.3                                      ' Pin für 1wire Schnittstelle festlegen, Schnittstelle wird von BASCOM durch Software realisiert

'Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
'Config Lcd = 20 * 4
'Cls
'Cursor Off

Config Adc = Single , Prescaler = Auto , Reference = Avcc   'ADC Wandler definieren
Start Adc                                                   'ADC starten


Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Serialin = Buffered , Size = 128
Open "com1:" For Binary As #1
Open "COMB.7:9600,8,N,1" For Input As #2                    'PB.7 = RxD SoftUART / GPS

'Config Servos = 1 , Servo1 = PortB.0 , Reload = 10          'Servos konfigurieren
'Config Portb.0 = Output                                     'PortB.1 ist Output für Servo1



Declare Sub Xbee                                            ' Senderoutine, um $GROUND#... permanent zu senden


Enable Interrupts


Print "KaprigPRINT"

Sound Piezo , 220 , 227
Waitms 125
Sound Piezo , 220 , 227
Waitms 125
Sound Piezo , 220 , 227
Waitms 125

Waitms 1500



Do
   '( 'tests
    S1_winkel = 50
    Servo(1) = S1_winkel
    Waitms 500
    S1_winkel = 150
    Servo(1) = S1_winkel
')

   '==========Temperaturmessung mit DS18B20Z 1Wire============================

   1wreset
   1wwrite &HCC
   1wwrite &H44
   Waitms 800

   1wreset
   1wwrite &HCC
   1wwrite &HBE


   For X = 1 To 9
      Temp(x) = 1wread()
   Next


   Celsius = Makeint(temp(1) , Temp(2))

   T = Celsius / 16

   Temperatur = Fusing(t , "##.#")



   '==========Spannung LiPo 2S messen========================================

   Spannung = Getadc(0)                                     ' Zelle messen und berechnen
   Zellspannung_orig = Spannung * Adc_multi
   Zellspannung_orig = Zellspannung_orig * 2
   Zellspannung = Fusing(zellspannung_orig , "#.#")

   If Zellspannung_orig <= 6.4 Then                         ' Zellspannung unter/gleich 6,4 Volt (2x 3,2 Volt) dann...
      Gosub Lipo_saver
   End If

   Start Adc                                                ' möglicherweise gstoppten ADC ("Lipo_saver") wieder starten



   '==========Rx Prüfen auf Befehlseingänge==================================

   Befehls_zeichen = Inkey(#1)                              ' Zeichen einlesen

   If Befehls_zeichen = 36 Then Input #1 , Befehlsdaten Noecho       ' ist "$"  vorhanden, dann Daten/HardUART einlesen >> Befehlsdaten

      Befehls_header = Mid(befehlsdaten , 1 , 6)            'ersten 6 Zeichen nach Befehls_header einlesen
      If Befehls_header = "KAPRIG" Then                     'wenn KAPRIG Befehlssatz, dann

         Befehls_anzahl = Split(befehlsdaten , Befehls_teilstring(1) , "#")       'aus Befehlsdaten in 5 Teilstrings/Arrays, getrennt durch "#", aufteilen
         Befehlsdaten = ""                                  'befehlsdaten leeren
         Gosub Commands                                     ' Auswertung der Befehle/Teilstrings in Subroutine "commands"

      End If


   '==========GPS-Auswertung (NL-504ETT)=====================================

   Gps_zeichen = Inkey(#2)                                  ' Zeichen einlesen

   If Gps_zeichen = 36 Then Input #2 , Gpsdaten Noecho      ' ist "$"  vorhanden, dann Daten/SoftUART #1 einlesen >> Gpsdaten

      Gps_header = Mid(gpsdaten , 1 , 5)                    'ersten 5 Zeichen nach Gps_header einlesen
      If Gps_header = "GPGGA" Then                          'wenn GPGGA Befehlssatz, dann

         Cls
         Gps_anzahl = Split(gpsdaten , Gps_teilstring(1) , ",")       'aus Gpsdaten in 14 Teilstrings/Arrays, getrennt durch ",", aufteilen
         Gps_anzahl = Split(gps_teilstring(10) , Gps_hoehenteilstring(1) , ".")       'Teilstring 10, Höhe xxx.xx, aufteilen in Wert vor dem "."
         Gpsdaten = ""                                      'gpsdaten leeren
         Gpshoehe = Gps_hoehenteilstring(1)                 'gpshoehe = Höhe in Metern vor dem Komma über Meeresspiegel

      End If


   Call Xbee                                                ' kontinuierliches Senden der Parameter

Loop
End



'----------------Befehlsbibliothek "Commands"-----------------------------------

Commands:
   Select Case Befehls_teilstring(2)

     Case "TAKEPHOTO"                                       ' Teilstring(2) auswerten auf "TAKEPHOTO"
     Locate 4 , 1
     Lcd Befehls_teilstring(2)
     Pwr_all = 0
     Waitms 500
     Pwr_all = 0
     Quittierung = "Photo is taken"
     Waitms 500
     Quittierung = ""
     Cls
     Pwr_all = 1

     Case ""
     Case ""

   End Select



   Select Case Befehls_teilstring(3)                        ' hier optionale Auswertung von weiteren Teilstrings

     Case ""

     Locate 4 , 1
     Lcd Befehls_teilstring(3) ""

     '(
            Decr S1_winkel                                    'um 1 verkleinern
            Servo(1) = S1_winkel


            Incr S1_winkel                                    'um 1 erhöhen
            Servo(1) = S1_winkel


')

   End Select

Return



'----------------LiPo-Saver/Abschaltung "Lipo_saver"----------------------------

Lipo_saver:
   Quittierung = "LiPo-Saver!"                              ' Quittierung an Bodenstation
   Stop Adc                                                 ' ADC abschalten um Strom zu sparen
   Stop Ac                                                  ' AC abschalten um Strom zu sparen
   Pwr_all = 0                                              ' testweise Ausgabe PWR_all = 0 --> hier: LED an!
   Locate 4 , 1
   Print "LiPo-Saver!"
   Waitms 500
   Quittierung = ""                                         'Quittierung löschen


Return



'----------------Sonstiges------------------------------------------------------

Sub Xbee

    Print "§GROUND#" ; Quittierung ; "#" ; Zellspannung ; "#" ; Gpshoehe ; "#" ; Temperatur ; "#"

End Sub
 
Um ehrlich zu sein: ich habe den ganzen Thread nicht gelesen.

Aber so auf die Schnelle: Wenn du mit zwei Spannungen arbeitest (für Servo und uC), dann musst du die Masse von beiden miteinander verbinden.
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)