Hallo, habe folgendes Problem, mein Atmega 8 sendet im Programm (bascom)
"AT" zum GSM-Modem und liest dann über getline sret das "ok" vom Modem
zurück. Das funzt auch über den Atmega 8, jedoch hängt sich der nun
genutzte Atmega32 in der Schleife auf! Was mache ich verkehrt? Wenn das
mit dem dem Atmega 8 geht warum dann nicht mit dem 32? Muss man in der
Konfiguration etwas ändern was die serielle Schnittstelle angeht? ich
habe unten das Programm einopiert.
Den Anfang der Schleife habe ich mit ****************
geennzeichnet,ebenso das Ende davon. Wäre schön wenn einer was
entdeckt-ich steh aufm Schlauch...
Viele Grüße!
$regfile = "m32def.dat" ' ATmega32
$crystal = 10000000 ' für mein
Board
$baud = 9600
Declare Sub Getline(s As String)
Declare Sub Flushbuf()
Declare Sub Showsms(s As String )
Dim Z As Word
Dim Nummer As String * 30
Dim Laenge As String * 30
Dim Laenge2 As String * 30
Dim P As Word
Dim P1 As Word
Dim V As Byte
Dim Q As Byte
Dim A1 As String * 1
Dim A2 As String * 1
Dim A3 As String * 1
Dim A4 As String * 1
Dim A5 As String * 1
Dim Nummer1 As String * 15
Dim Nummer2 As String * 15
Dim Nummer3 As String * 15
Dim Nummer4 As String * 15
Dim Rechts As Byte
Dim Links As Byte
Dim U As Byte
Dim N As Byte
'used variables
Dim I As Byte , B As Byte
Dim Sret As String * 35 , Stemp As String * 6
Dim Status As Byte
'we use a serial input buffer
Config Serialin = Buffered , Size = 12 ' buffer is
small a bigger chip would allow a bigger buffer
Enable Interrupts
'define a constant to enable LCD feedback
Const Uselcd = 1
Const Senddemo = 1 ' 1= send an
sms
Const Pincode = "AT+CPIN=2055" ' pincode
change it into yours!
Config Porta.0 = Output 'rote led
beim Taster links
Config Porta.1 = Output
Config Portc.3 = Input
Config Portc.2 = Output
Config Portc.1 = Output
Config Porta.4 = Input
Config Portd.2 = Output
Portc.0 = 1
Portd.2 = 1
Grun Alias Porta.0 'gelbe led
im rechten Taster
Rot Alias Porta.1
Nachricht Alias Pinc.3
Lednachricht Alias Portc.2
Ledalarm Alias Portc.1
Alarm Alias Pina.4
Const Sms1 = "alarm !!! GSM Alarm V2.1"
Enable Interrupts
'Anfangssequenz
For N = 1 To 10
Rot = 1
Waitms 50
Rot = 0
Waitms 50
Grun = 1
Waitms 50
Grun = 0
Waitms 50
Next
'nun Modem suchen!
Flushbuf
********************************************************************
Do
Waitms 250
Rot = 1
Print "AT"
Waitms 10
Getline Sret `wenn ich sret weglasse geht die Schleife und "rot" blinkt
Waitms 250
Rot = 0
Loop Until Sret = "OK"
*********************************************************************
Rot = 0
Grun = 1
Print "at"
Waitms 2000
Print "at+clip=1"
Waitms 400
Waitms 3000
Print "at"
Flushbuf ' flush the
buffer
Print "ATE0"
Print " Es wurde das Modem konfiguriert, nun wird es abgefragt ob OK
gesendet."
Waitms 500
' modem must send OK
Flushbuf ' flush the
input buffer
Print "Modem wurde erkannt und die Schleife zur Abfrage verlassen!"
Grun = 1
Rot = 0
Waitms 50
Print " es wurde die gruene Led angeschalten"
'Nummer1
V = 0
Q = 0
U = 0
N = 0
A1 = ""
A2 = ""
Links = 0
Rechts = 0
Waitms 10
Print "at+cpbr=2"
Waitms 10
Getline Sret
Waitms 10
If Sret = "OK" Then
Goto Unten
End If
Q = 1
Do
A2 = Mid(sret , Q , 1)
Waitms 10
Print A2
Waitms 10
V = V + 1
Q = Q + 1
Loop Until A2 = ","
Print " V hat einen Wert von"
Print V
Waitms 10
Print Sret
Waitms 10
Print "Berechnung des ersten Werts"
U = 10
If V = 10 Then
U = 11
End If
Do
A1 = Mid(sret , U , 1)
Waitms 10
Print A1
Waitms 10
N = N + 1
U = U + 1
Loop Until A1 = ","
Waitms 10
Print "N hat einen Wert von"
Print N
Waitms 10
Print Sret
Waitms 10
Rechts = N + 7
Laenge = Right(sret , Rechts)
Print Laenge
Waitms 1000
Links = N - 3
Laenge2 = Left(laenge , Links)
Print "Endergebnis ist"
Print Laenge2
Waitms 10
Nummer1 = Laenge2
Unten:
Rot = 1
Grun = 0
'main loop
' send pincode
'sms settings
Print "AT+CSMP=17,167,0,0"
Getline Sret
Print "AT+CNMI=0,1,2,0,0"
Getline Sret
Waitms 1000
Print "at+clip=1"
Waitms 300
'get line of data from buffer
Sub Getline(s As String)
S = ""
Do
B = Inkey()
Select Case B
Case 0 'nothing
Case 13 ' we do not
need this one
Case 10 : If S <> "" Then Exit Do ' if we have
received something
Case Else
S = S + Chr(b) ' build
string
End Select
Loop
End Sub
'flush input buffer
Sub Flushbuf()
Waitms 100 'give some
time to get data if it is there
Do
B = Inkey() ' flush
buffer
Loop Until B = 0
End Sub
@ Uwe Neubert (Gast)
>Hallo, habe folgendes Problem, mein Atmega 8 sendet im Programm (bascom)
Und mit den Forumsregeln. Lange Quelltexte als Anhang!
MfG
Falk
Sorry, habe ich nicht für voll genommen- aber du hast auch nichts sinnvolles zum Thema gepostet...
Du hast in der Subroutine "Getline" Case 0 und Case 13 nicht definiert. Irgendwas, was er in diesen Fällen machen soll, mußt Du ihm da sagen. MfG Paul
Sret ist ein String, der nachdem seriellen Auslesen den Wert von Getline einnimmt. Hab die Überschrift nur so geneannt worums direkt geht. Du kannst sret auch anders nennen ;-) guck mal in den Text da steht worums geht. Viele Grüße!
Hallo Paul, danke erstmal! ich habe direkt allen Text so übernommen wie er unter einem Atmega8 lief! Nun gehts aber direkt nicht so mit dem 32. Muss das Case (was macht das?) an den Atmega32 angepasst werden? Für mein wissen heisst case "Lösche Zeichen ...)" Ne Idee was da eingestellt werden muss?
Läuft der M32 auch mit 10MHz ? Falls nicht wird der das "OK", bzw. das <CR> danach, nicht erkennen und ewig warten. Du kannst es ja Testweise mit einem PC verkabeln ob die Zeichen so gesendet werden.
> Muss das > Case (was macht das?) an den Atmega32 angepasst werden? Vermutlich nicht. > Für mein wissen > heisst case "Lösche Zeichen ...)" Aua... Select Case ist eine Fallverzweigung mit mehreren Verzweigungsmöglichkeiten, vergleichbar mit Switch in C. Löschen tut Case also erstmal nicht. Vielleicht solltest Du doch den Controllertyp nehmen, für den der Programmautor das Programm geschrieben hat. Alternativ könntest Du die Programmiersprache (in diesem Fall BASIC im BASCOM-Dialekt) lernen, dazu ist das vorliegende Programm aber schon ein paar Nummern zu groß, beim Lernen beginnt man mit kleineren überschaubareren Projekten. Ich kann dem oben gezeigten Quelltext übrigens nichts abgewinnen, er ist schlecht formatiert (viele sinnlose Mehrfach-Leerzeilen, die unnötiges Scrollen erfordern) und enthält weder sprechende Variablennamen noch ist er ausreichend kommentiert. Solche Quelltexte tu ich mir nicht an, weshalb Du auch keine weiterführende Hilfe von mir erwarten kannst. KH
Was sagt eigentlich das Modem dazu, dass Du ihm Deine Debug-Texte hinschickst? Mit "Print" gibst Du Daten auf der seriellen Schnittstelle aus, und da ist Dein Modem dran. Nur kann es mit Print " Es wurde das Modem konfiguriert, nun wird es abgefragt ob OK gesendet." nicht sehr viel anfangen...
@Falk Brunner (falk)
Du bist und bleibst ein alter Nörgler :-(
Uwe Neubert (Gast) wrote:
>du hast auch nichts sinnvolles zum Thema gepostet...
Hast Recht, lass' dir von dem nichts vorschreiben, der kann ja doch nur
immer die Anderen kritisieren.
Der ist ein sogenannter Meckertroll.
> Der ist ein sogenannter Meckertroll.
Naja, er hat auch schon oft anderen Leuten geholfen. Und er hat auch
schon viele hochkarätige Artikel im Wiki verfasst (ob sie ein Anfänger
versteht, sei allerdings dahingestellt). Da sollten wir ihm doch seine
Blockwart-Mentalität verzeihen, es kann eben keiner aus seiner Haut. ;-)
KH
Kachel-Heinz wrote: >> Der ist ein sogenannter Meckertroll. > > Naja, er hat auch schon oft anderen Leuten geholfen. Und er hat auch > schon viele hochkarätige Artikel im Wiki verfasst (ob sie ein Anfänger > versteht, sei allerdings dahingestellt). Da sollten wir ihm doch seine > Blockwart-Mentalität verzeihen, es kann eben keiner aus seiner Haut. ;-) > > KH Wo er nun mal Recht hat, hat er Recht.
@Was sagt eigentlich das Modem dazu, dass Du ihm Deine Debug-Texte hinschickst? Mit "Print" gibst Du Daten auf der seriellen Schnittstelle aus, und da ist Dein Modem dran. Nur kann es mit Print " Es wurde das Modem konfiguriert, nun wird es abgefragt ob OK gesendet." nicht sehr viel anfangen... Das Modem interessiert das nicht,es ist nur eine Hilfskomponente, ich lasse mir das zum experimentieren auf Hyperterminal anzeigen und das Modem störts nicht. Der Atmega ist ein 16-er Typ, das heisst, er sollte auch mit 10Mhz laufen :-) @...Vielleicht solltest Du doch den Controllertyp nehmen, für den der Programmautor das Programm geschrieben hat. Alternativ könntest Du die Programmiersprache (in diesem Fall BASIC im BASCOM-Dialekt) lernen, dazu ist das vorliegende Programm aber schon ein paar Nummern zu groß, beim Lernen beginnt man mit kleineren überschaubareren Projekten. Das ist nicht mein erstes Projekt, ich befasse mich schon ne Werile mit bascom und denke dass ch schon einige Vokabeln kenne. Wenn der Auto das nur für Atmega8 geschrieben hat,so ist das ja schön, aber ich brauche mehr SRAM-Speicher! Ich lese 40 stellen aus dem Telefonbuch der Simkarte aus und da kann man mit At8 einpacken. Habe das Case mal entfernt unten in der Routine, aber kein Erfolg.
Die Frage ist nicht ob er 10MHz kann, sondern ob der 10MHz macht ? Was man im Bascom-Programm angibt interessiert den AVR wenig ! Sind die Fuses geändert, bzw. läuft der AVR noch wenn der Quarz entfernt wurde ?
@ Geier Sturzflug (Gast) >Du bist und bleibst ein alter Nörgler :-( Kaum. Nie gewesen. >Hast Recht, lass' dir von dem nichts vorschreiben, Ich schreibe nicht vor, ich weise auf Fehler hin. > der kann ja doch nur >immer die Anderen kritisieren. >Der ist ein sogenannter Meckertroll. Jaja. @ Kachel-Heinz (Gast) >versteht, sei allerdings dahingestellt). Da sollten wir ihm doch seine >Blockwart-Mentalität verzeihen, es kann eben keiner aus seiner Haut. ;-) Schwarz-Weiss Maleei ist immer wieder gern gesehn. Auch hier. Ist es mittlerweile nicht mehr politisch korrekt, Kritik anzubringen? Soll man in Zukunft "eh voll antiautoritär und individuell du" auf jegliche Formen hier verzichten? Viel Spass dabei. MFG Falk P.S. Einer muss ab und an sagen , das was im Argen liegt. Es ist ein Scheissjob, aber einer muss ihn machen. Und das ist kein cooler Spruch, sondern die Realität.
Die Fuses sind auf den Quarz eingestellt, du meinst sicher, dass er noch in 1Mhz laufen könnte? Kann mir schwer vorstellen dass es am Tat liegt aber ich teste es natürlich! Werde mal spassenshalber 8Mhz einlöten und dann mal sehen. Wie gesagt, die Fuses sind draufgebacken in der Einstellung 1111 (das ist der Quarz) Am Anfang macht die Schalte ein Anfangsgeplänkel- Led rot und grün blinken kurz im Wechsel bevor es an diese ominöse Schleife geht. Und da hängt er sich auf.
Irgendwas ist hier generell im Argen, es geht jetzt nichtmal mehr am Atmega8! Habe das testweise umgebaut und andere Platinen anderer Projekte die auch die Serielle Schnittstelle nutzen getestet. Es hängt sicvh stets dort auf. ich schliesse mittlerweile einen Programmierfehler (Kabel?) oder eine falsche Einstellung im Bascom nicht mehr aus. Ist doch eigenartig,alle Projekte die vorher so liefen gehen jetzt nicht mehr. Folgt: Es<muss sich was geändert haben :-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.