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
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
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.
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
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
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
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
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/
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
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.