www.mikrocontroller.net

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


Autor: Uwe Neubert (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Uwe Neubert (Gast)
Datum:

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

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist Sret?

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Uwe Neubert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Uwe Neubert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: John Small (linux_80)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Kachel-Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marvin M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Geier Sturzflug (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Kachel-Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Uwe Neubert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: John Small (linux_80)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Uwe Neubert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Uwe Neubert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.