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.