Hallo Zusammen,
nachdem der WEBServer als Temperaturüberwachung und das SMS Modul von
Ulrich Radig ohne Probleme läuft.
Wollte ich nun die SMS Funktion in den WEBServer einbinden(Der Server
soll einfach nur denn PIND.3 kurz setzen und löschen, dies löst dann am
SMS Modul eine SMS aus).
Nur leider gelingt es mir nicht, in der main.c den Ausgang PIND.3
innerhalb der while Schleife zusetzen. Setze ich hingegen den Ausgang
vor die while Schleife funktioniert es komischer weise super. Woran kann
das liegen?
Hier noch mein Code für die Mail und SMS Anweisung.
Code:
Den Code kann doch so keiner lesen. Häng denn mal als Anhang dran.
Ausserdem finde ich kein einziges "while" darin. Was ist jetzt also
genau die Frage?
Oliver
Nachtrag: Woher weisst du denn, ob
DDRD |= (1 << 3);
.
.
.
PORTD |= (1 << 3);
cli();
PORTD &= ~(1 << 3);
nicht funktioniert? (Ich sehe keinen Grund, warum das nicht
funktionieren sollte). Dein schnelles Speicher-Oszi sollte das
problemlos anzeigen können.
Oliver
Hallo Oliver,
also ich habe eine LED am ende hängen und wenn ich das richtig Verstehe
und is ja auch Logisch is der AVR schneller als meine LED (Auge). Und
der Ausgang wird gesetz und wieder rückgesetzt. Also heißt das für mich
das ich eine delayzeit brauche.
Aber das komische an der Sache is, wenn ich das rücksetzen weg lass,
dann müsste ja mein Ausgang gesetz, aber nicht zurückgesetzt werden,dies
tut er nicht.
Und wie lang muss eigentlich eine 1 Signal am AVR stehen das es als
soches erkannt wird?
Ich habe noch die orginal Main.c angehängt.
Mfg Mirko
> Aber das komische an der Sache is, wenn ich das rücksetzen weg> lass, dann müsste ja mein Ausgang gesetz, aber nicht> zurückgesetzt werden, dies tut er nicht.
Wie rum ist die LED eingebaut?
LED werden oft so eingebaut, dass am Port eine
logische 0 ausgegeben werden muss, damit die LED leuchtet.
hier mal mein Schaltplan.
Also ich habe es so schaltet das ich eine Logisch 1 brauche um den
Versand einzuleiten. Und 5V auf eingang funktioniert auch super.
mfg Mirko
"wenn ich das rücksetzen weg lass,
dann müsste ja mein Ausgang gesetz, aber nicht zurückgesetzt werden,.."
Jepp, das würd ich auch erwarten.
Nachfrage: An welchem PIN hängt denn deine LED?
(1<<3) != (1<<PD3)
Oliver
P.S. Schonmmal im Simulator durchgesteppt?
Ja aber (1<<3) funktioniert in meinem SMS Modul richtig super, deshalb
habe ich das auch für den Webserver übernommen. Also Beweis habe ich mal
meine Main.c des SMS-Servers mit beigelegt.
Oder liegt es an der Stelle mit den #define ?
Das ich das gleiche beim Webserver program machen muss und weshalb geht
der Spass aber vor der while schleife aber nicht innerhalb?
Mfg Mirko (Der Tibitanische Wandermönch, Fragen über Fragen)
Hier mal ein Bild meines Kompletten ausbaus, um sich die gesamte
Geschichte mal richtig vorzustellen.
Ich sende bei überschreiten einer Temp eine 1 über PIND3 vom Webserver
zum Optokoppler meines SMS-Servers. Und von dort aus Versende ich die
SMS.
mfg Mirko
Hallo zusammen und Danke für die Hilfe,
habe es hin bekommen und zwar war der fehler in der klammer mit
(1<<PD3) für setzen und (0<<PD3) für rücksetzen.
Funktioniert wie geschmiert und hab vielen Dank Mirko
???
Also entweder hst du hier anderen Code gepostet, als bei dir tatsächlich
lief (ganz böser Fehler :-), oder da stimmt sonst was nicht.
PORTD |= (1 << 3);
PORTD &= ~(1 << 3);
ist auf jeden Fall richtig. (0<<3) findet ich in deinem Code gar nicht,
wohl aber (0 << 7) ...
Was war es denn wirklich?
Oliver
Also hier is mein fertiger Code der jetzt schon ohne Probleme 4 EMail
und 4 SMS verschickt hat. läuft super.
Wobei ich ja immer noch am grübeln bin woran es lag.
Denn nur an PD3 kann ich mir nicht vorstellen den auf dem SMS-Server
habe ich es auch mit 3 geschrieben und es funtz. Naja Funktion is da,
und ich hab wieder etwas gelernt.
Prima... Und noch mal vielen Dank für die schnelle Hilfe. Mirko
Anbei noch meine Fertige main.c
Das hier
PORTD &= (0 << PD3);
macht aber ganz was anderes als du willst.
Merke: Eine 0 kannst du so oft nach links schieben
wie du willst, es bleibt immer noch eine 0.
Da steht also in Wirklichkeit:
PORTD &= 0;
und das schaltet am Port D alle Bits auf 0.
Das hättest du auch einfacher haben können
PORTD = 0;
Da ist zwar auch PD3 dabei, keine Frage, aber auch andere.
Im Moment wird dich das wahrscheinlich nicht kratzen.
Nichts desto trotz ist es eine Zeitbombe die nur darauf
wartet, ....
Danke für den Tipp
aber wie bekomme ich das jetzt richtig hin. Bin total verwirrt.
Denn ich muss noch ca 5 Meldungen abarbeiten. Denn unsere Kompressoren
sollen in nächster Zeit auch noch an das SMS System.
Aber die werden direkt an den SMS-Server geklemmt.
Gruß Mirko
> aber wie bekomme ich das jetzt richtig hin.
Dein Problem muss was anderes sein.
PORTD &= ~( 1 << PD3 );
ist schon richtig: Es setzt den Pin 3 am Port D auf 0.
Sach ich doch.
Wenn (PORTD &= (0 << PD3); den Pin auf Null setzt, PORTD &= ~(1 << 3);
aber nicht, dann ist was faul im Staate Dänemark. Und zwar ganz
gewaltig.
Entweder hängt die LED tatsächlich am falschen Pin (ich kann dein
.sch-File mit dem Schaltplan hier nicht öffnen), oder sonstwas, aber das
Problem solltest du lösen. Es holt dich mit Sicherheit wieder ein.
Abgesehen davon, daß da ja immer noch diverse (0<<7) u.ä. auf dem Port
rumspielen, und da anscheinend noch mehr Harware dranhängt. Auch das
solltest du klären.
Oliver
Okey ich checke das Prog Morgen in der Frima noch einmal auf Herz und
Nieren. Und noch einmal reisigen Dank für eure Hilfe.
Hoffe auch das ich diese Woche die Doku fertig bekomme und dann posten
kann. bis dahin viel Spaß.