Forum: Mikrocontroller und Digitale Elektronik Sret geht nicht an Atmega 32, jedoch bei Atmega8!


von Uwe Neubert (Gast)


Angehängte Dateien:

Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@ Uwe Neubert (Gast)

>Hallo, habe folgendes Problem, mein Atmega 8 sendet im Programm (bascom)

Und mit den Forumsregeln. Lange Quelltexte als Anhang!

MfG
Falk

von Uwe Neubert (Gast)


Lesenswert?

Sorry, habe ich nicht für voll genommen- aber du hast auch nichts 
sinnvolles zum Thema gepostet...

von Simon K. (simon) Benutzerseite


Lesenswert?

Was ist Sret?

von Paul Baumann (Gast)


Lesenswert?

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

von Uwe Neubert (Gast)


Lesenswert?

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!

von Uwe Neubert (Gast)


Lesenswert?

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?

von John S. (linux_80)


Lesenswert?

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.

von Kachel-Heinz (Gast)


Lesenswert?

> 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

von Marvin M. (Gast)


Lesenswert?

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

von Geier Sturzflug (Gast)


Lesenswert?

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

von Kachel-Heinz (Gast)


Lesenswert?

> 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

von Simon K. (simon) Benutzerseite


Lesenswert?

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.

von Uwe Neubert (Gast)


Lesenswert?

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

von John S. (linux_80)


Lesenswert?

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 ?

von Falk B. (falk)


Lesenswert?

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

von Uwe Neubert (Gast)


Lesenswert?

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.

von Uwe Neubert (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.