Forum: Mikrocontroller und Digitale Elektronik Newbi Frage


von Samuel Schmidt (Gast)


Lesenswert?

Hallo,

ich möchte mir eine "Black-Box" bauen, die über ein angeschlossenes 
Handy oder Modem SMS versicken kann.
Ich möchte das ganze möglichst günstig bauen, der Faktor Zeit ist nicht 
so schlimm.

Ich brauche

- min 2x serielle Schnitstelle (1xModem/Handy 1xGPS)
Anschluss für ein 4x40 Display
Anschluss für 6 Tasten
schön wären:
weitere digitale Eingänge
digitale Ausgänge
analoge Eingänge


Gibt es dafür schon freie Lösungen?
Welche Hardware ist dafür nötig(/zu empfehlen)?

MfG

Samuel Schmidt

von Axel(ojojo) (Gast)


Lesenswert?

Hi Samuel,

Dein Projekt kling interessant.

Möchtest Du automatisch die Possition Deines Autos ge-sms-t bekommen ?
Ich würde gerne mit Dir zusammen an diesem Projekt arbeiten.

Display sollte kein Problem sein
Taster auch nicht

digitale Ausgänge sind ja obligatorisch

mit analogen Eingängen kenne ich mich leider noch nicht aus.

Wenn wir 2 UARTs brauchen müssen wir vielleicht 2 AVRs nehmen?

jo
Axel

von ERDI - Soft (Gast)


Lesenswert?

Hi,

nehmt doch die neuen ATmegas. (ATmega128k oder so was.) Die haben doch 
schon 2 serielle Schnittstellen. Oder realisiert ne 
Software-Schnittstelle. Soweit ich mich erinnern konnte, war vor kurzem 
schon mal ein Posting über ne softwaremäßig realisierte serielle 
Schnittstelle in diesem Forum. Ansonsten einfach mal bei www.Atmel.com 
die Application Notes durchgucken. Da gibts viele interessante 
Applikationen.

Für was sollen denn die analogen Eingänge sein? (Wenn mich nicht alles 
täuscht, dann hat der ATmega128 auch nen A/D-Wandler intus.)

Oder anders: Ich glaube, Anfang diesen Jahres wurde im Elektor ein 
ähnliches Projekt vorgestellt, allerdings ohne GPS. Vielleicht ist das 
ja auch interessant. Kann im Moment aber leider nicht sagen, welche 
Ausgabe das war.


Bis denn, ERDI - Soft.

von Steffen Z. (Gast)


Lesenswert?

Hallo,

ich bin auch gerade bei einem ähnlichen Projekt.
Würde auch gerne mitmachen...

Bin gerade beim SMS decodieren (PDU-Mode) aber bekomme es noch nicht 
ganz hin, weil ich auch noch ziemlich neu auf dem Gebiet bin. 
Umwandlungen sind heavy char->hex->bin->(7-bit-)hex - siehe Thread 
(Bit-Rechnen)

GPS funktioniert bei mir schon, baue noch einen kleinen NMEA-Parser, der 
die verschiedenen Sentences nach Daten durchsucht.

Allerdings habe ich alles bisher mit einem 8535 ausprobiert. Der hat 
auch nur einen UART, das heißt ich muss mir auch noch was einfallen 
lassen mit beiden Anschlüssen...

Vielleicht bringen wir ja gemeinsam was zum Laufen...
Bis dann

Steffen

von Christian (Gast)


Lesenswert?

Hey - ich find's fit, dass gerade ein lustiges Gemeinschaftsprjekt 
entsteht. Zu Problemlösung mit den Schnittstellen könnte man eventuell 
mit ein paar Transistoren einen Schnittstellen umschalter bauen oder 
sowas (ist der eine Pin high wird die interne Schnittstelle auf GPS 
geleitet ansosnten aufs Modem) Geht halt nicht wenn sie gleichzeitig 
senden oder wenn sie nur in unregelmaßigen Zeitabständen senden können.

mfg

von Axel(ojojo) (Gast)


Lesenswert?

hey, das mit dem Umschalter ist ne gute Idee finde ich super !!
jo
Axel

von Samuel Schmidt (Gast)


Lesenswert?

Moin,

das geht ja echt schnell hier. Vielen Dank.
Ich bin nur eben ein echter Newbe, ich suche ersteinmal nach einem 
geeignetem Proz für das ganze. Ich habe mir mal den SC12 angesehen, der 
scheint geeignet.
Aber irgendwie ist der mir schon fast "zu groß".
Ich dachte mir das ein Atmel ganz gut passen könnte.
So jetzt die Frage, welcher Atmel geht für die Problemstellung. (eine 
Serielle Schnittstelle tuts zur not auch, wenn man zwei Proz. einfach 
verknüpfen kann). Ich habe mir die ganze Sache noch mal angesehen, und 
wollte mich erst einmal auf das SMS senden via Modem Konzentrieren und 
dann das ganze auf ein Handy (s25) umsetzen. Alles andere dann später. 
Ich hab nur 2,5 Monate Semesterferien ;).


Jetzt nochmal konkret meine Frage:

Aufgabenstellung:
- SMS senden via Modem und Handy
- Tasten (ca 6)
- Display (ca 20x2)
- reserve für GPS (also serielle Schnittstelle)
- reserve für min 8digi Eingänge + min 8digi Ausgänge
(- "C" wäre schön, ASM geht aber auch[muß auch wohl,oder?])

Welchen Proz?
Welche Literatur (möglichst deutsch zum Anfang)?

MfG

Samuel Schmit

von Micha (Gast)


Lesenswert?

Hallo,

ich habe mich schon etwas mit der Umsetzung Telefonnummer und Text
zu einem PDU-String befasst. Dazu habe ich ein VB-Testprogramm 
geschrieben.

Im Programm gibt es drei Textfelder:

strTel_Nr : Telefonnummer an die gesendet werden soll
strMsg_Txt: Text der übertragen werden soll
strPDU    : umgewandelter PDU-String

es ist noch eine Befehlsschaltfläche:

PDU_Str      vorhanden.
Nach Eingabe der Telefonnummer und des zusendenden Textes wird durch 
Klick auf die Schaltfläche der PDU-String generiert.
Da das Programm nur zum Test gedacht war ist es auch nicht sauber 
ausprogrammiert und vollständig. Es kann aber als Anregung für eine 
Weiterentwicklung sein.


Private Sub PDU_Str_Click()

    strPDU.Text = Tel_Nr + SMS_Msg()

End Sub



Function SMS_Msg() As String

Dim intLaenge As Integer
Dim intLaengenZaehler As Integer
Dim intCount As Integer
Dim intPDULaenge As Integer
Dim intBitZaehler As Integer
Dim intSchleifenZaehler As Integer

Dim bytTmp As Byte
Dim bytLo As Byte
Dim bytHigh As Byte

Dim bytMsgIn(0 To 1024) As Byte
Dim bytMsgOut(0 To 1024) As Byte


    'Arrays löschen (bzw mit "0" vorbelegen)
    For intN = 0 To 1024
        bytMsgIn(intN) = 0
        bytMsgOut(intN) = 0
    Next

    'Länge des Textes ermitteln
    intLaenge = Len(strMsg_Txt)

    'Carrige-Return anhängen
    strMsg_Txt = strMsg_Txt + vbCr

    'Text in Bytearray schreiben
    For intLaengenZaehler = 0 To intLaenge - 1
        bytMsgIn(intLaengenZaehler) = AscB(Mid(strMsg_Txt, 
intLaengenZaehler + 1, 1)) And &H7F
    Next

    intBitZaehler = 1
    intPDULaenge = 0
    bytTmp = 0

    For intLaengenZaehler = 0 To intLaenge - 1
        bytTmp = bytMsgIn(intLaengenZaehler)
        For k = intBitZaehler To 1 Step -1
            'Übertrag aus Rechtsschiebung zum vorhergehenden Byte 
addieren
            If bytMsgIn(intLaengenZaehler + 1) Mod 2 Then
                bytTmp = bytTmp + (2 ^ (8 - k))
            End If
            'Rechtsschiebung
            bytMsgIn(intLaengenZaehler + 1) = bytMsgIn(intLaengenZaehler 
+ 1) \ 2
        Next

        bytMsgOut(intPDULaenge) = bytTmp
        intPDULaenge = intPDULaenge + 1

        intBitZaehler = intBitZaehler + 1
        'nach 8 Byte zurücksetzen
        If intBitZaehler = 8 Then
            intBitZaehler = 1
            'im Text eine Position weiter
            intLaengenZaehler = intLaengenZaehler + 1
        End If
    Next

    'Protocol Idenfifier
    SMS_Msg = "F1"

    'Längenbyte der Nachricht (Anzahl Zeichen der Nutzdaten!)
    bytHigh = intLaenge \ 16
    bytLo = intLaenge And &HF
    If bytHigh > 9 Then
        SMS_Msg = SMS_Msg + Chr(bytHigh + 55)
    Else
        SMS_Msg = SMS_Msg + Chr(bytHigh + 48)
    End If
    If bytLo > 9 Then
        SMS_Msg = SMS_Msg + Chr(bytLo + 55)
    Else
        SMS_Msg = SMS_Msg + Chr(bytLo + 48)
    End If

    'umgewandelter Text im Hex-Format
    For intBitZaehler = 0 To intPDULaenge - 1
        bytHigh = bytMsgOut(intBitZaehler) \ 16
        bytLo = bytMsgOut(intBitZaehler) And &HF
        'Zeichensatz beachten
        If bytHigh > 9 Then
            SMS_Msg = SMS_Msg + Chr(bytHigh + 55)
        Else
            SMS_Msg = SMS_Msg + Chr(bytHigh + 48)
        End If
        If bytLo > 9 Then
            SMS_Msg = SMS_Msg + Chr(bytLo + 55)
        Else
            SMS_Msg = SMS_Msg + Chr(bytLo + 48)
        End If
    Next

End Function

Function Tel_Nr()

Dim strS As String
Dim strTel(1 To 14) As String * 1
Dim intI As Integer
Dim intLen As Integer

    'Länge der Nummer ermitteln
    intLen = Len(strTel_Nr)

    'Zählindex ermitteln
    intI = intLen \ 2               'ganzzahliger Anteil
    intI = (intLen Mod 2) + intI    'plus Rest (0 oder 1)

    'Telefonnummer in Bytefeld übertragen
    For intN = 1 To intLen
       strTel(intN) = Mid(strTel_Nr, intN, 1)
    Next

    strTel(intN) = "F"

    'String zusammensetzen; mit Bytes vertauschen
    srtS = ""
    For intN = 0 To intI - 1
        strS = strS & strTel(intN * 2 + 2) & strTel(intN * 2 + 1)
    Next

    'TOA (Type of Address) internationale Nummer beginnt mit
    'der Landesvorwahl ("49") ... (die führende "0" wird weggelassen)
    strS = "91" + strS

    'Rückgabe der umgewandelten Nummer einschließlich Längenangabe
    Tel_Nr = Format((Len(strS) / 2), "00") + strS

End Function

von Mark Hämmerling (Gast)


Lesenswert?

Salut,

nur weil Ihr gerade die Umschaltung zwischen verschiedenen UARTs 
angesprochen habt... ein passender Mux wäre sicherlich der 74HC4052. Der 
verfügt über 2x 4 Kanäle, i.e., Ihr könntet bis zu vier UARTs 
anschließen - oder zwei, dann braucht Ihr auch nur eine Select-Leitung.

Wenn allerdings alle "virtuellen" UARTs AVR-seitig ständig auf Empfang 
stehen müssen, würde ich von der Mux-Lösung absehen.

Wie auch immer... hoffe, das hilft. :)

Mark H. -- http://markh.de/avr/

von Sebastian Wille (Gast)


Lesenswert?

Hi Leute,

genau so ein Projekt wollte ich auch machen (siehe mein Posting über 
mehrere UARTs vor ca. 1 bis 1 1/2 Monaten)! :-)

Aber anstatt SMS & Co. hatte ich folgende Idee: Ich verwende das Handy 
einfach als Modem und baue mit Hilfe dessen eine Verbindung zu meinem 
Heim-Rechner, der auch ein Modem hat, auf.

Ich denke, Software-UARTs sind die beste Lösung. Warum einen dicken, 
fetten AVR einsetzen, der die 2 UARTs halt "nebenbei" an Bord hat (und 
man somit alle anderen Funktionen herumschleppt)?

In dem AVR-Buch von Franzis ist eine Profi-Software-UART-Lösung 
dargestellt.

Das mit dem GPS, denke ich, ist kein Problem. Hier eine wirklich gute 
Seite dazu: http://fly.ch/gps/Nmea.htm

Wäre schön, nochmals was von Euch zu hören!

Sebastian

von Andi (Gast)


Lesenswert?

Zum Thema GPS: hat einer von euch schon einen parser in C geschrieben ?
wenn ja, würdet ihr mal bitte die Funktionen posten. Bin gerade selbst
damit beschäftigt, habe aber noch Anlaufschwierigkeiten.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.