Hallo ihr Alle, ich habe ein Problem, was nicht neu zu sein scheint. Ich habe gestern meine entworfenen Platinen bekommen. Als ich die Ports im Programm auf das neue Board anpasste, ging das Relais nicht mehr. Da merkte ich, dass ich für das Relais PB7 gewählt habe :-/ der ist ja normalerweise für das Quarz. Ich habe der Mega aber auf internen Takt gestellt. Nach allem was ich las, sollte der PB7 dann als Ausgang benutzt werden können. Geht aber nicht :-( Kann mir wer sagen woran das liegen könnt? mein Portdefine und init sind im Anhang. Vorab: ich weiß, dass die Header aufgeteilt in .h und .c gehört aber das splitte ich immer erst, wenn die fix und fertig ist. Die ganzen LED_...Funktionen können alle problemlos verwendet werden. Lediglich die Relais_...funktionen funktionieren nicht! Der compiler motzt aber nicht und das Programm bleibt bei Aufruf auch nicht hängen, sondern überspringt die relais_toggle funktion scheinbar einfach... HILLFE ^^ mfg
if( RELAISPORT & (1<<RELAIS)) // wenn relais pin7 ! aus ist ist... { RELAISPORT |= (1<<RELAIS); //...einschalten! } Wenn Relaispin an ist setze Relaispin...;)
DANKE. das war ja dä(h?)mlich!! aber leider ist das nicht die ursache.... habe es jezt geändert: void relais_tog() { if( RELAISPORT & (1<<RELAIS)) // wenn relais pin7 ! aus ist ist... { //RELAISPORT |= (1<<RELAIS); //...einschalten! RELAISPORT &= ~(1<<RELAIS); } else { //RELAISPORT &= ~(1<<RELAIS); // sonst ausschalte! RELAISPORT |= (1<<RELAIS); } } geht aber net. das war falsch, weil ich hatte bei der ursprungsplatine gegen 5 V geschaltet und nun gegen Masse...
@ Christian Peskov (peterfrosta) >void relais_tog() Geht deutlich einfacher, wenn man ein wenig über Bitmanipulation bescheid weiß.
1 | {
|
2 | RELAISPORT ^= (1<<RELAIS); |
3 | }
|
Ausserdem hast du noch ein eeher schlechte Programierweise. In ports.h gehörten dur DEKLARATIONEN von Funktionen, defines, etc. Die DEFINITION, als der "echte" Quelltext gehört in ports.c. Den der wird nur einmal komppilier, ports.h aber mehrfach per include in andere Quelldateien eingebunden. Das könnte auch dein Problem sein.
Danke auch an dich Falk! lauf nicht weg! ich muss nur aufpassen dass das essen nciht anbrennt, dann antworte ich^^
Falk Brunner schrieb: >>void relais_tog() > > Geht deutlich einfacher, wenn man ein wenig über Bitmanipulation > bescheid weiß. > { > RELAISPORT ^= (1<<RELAIS); > } also: void relais_tog(void) { RELAISPORT ^= (1<<RELAIS); } ?? ha, ja das ist wirklich deutlich einfacher! geil. danke Falk Brunner schrieb: > Ausserdem hast du noch ein eeher schlechte Programierweise. In ports.h > gehörten dur DEKLARATIONEN von Funktionen, defines, etc. Die DEFINITION, > als der "echte" Quelltext gehört in ports.c. Den der wird nur einmal > komppilier, ports.h aber mehrfach per include in andere Quelldateien > eingebunden. Das könnte auch dein Problem sein. Mit solch einer Antwort hatte ich ja gerechnet und deshalb das ganz oben schon vorweggenommen. Wenn du aber sagst, das könnte dir Ursache meines Problems sein, werde ich das natürlich gleich vernünftig in .c und.h aufteilen! Viel übrig bleibt mir ja auch nicht... wenn das dann auch ngeht, werde ich das relais wohl auslöten und gucken was am PB7 passiert...
@ Christian Peskov (peterfrosta) >Viel übrig bleibt mir ja auch nicht... wenn das dann auch ngeht, werde >ich das relais wohl auslöten und gucken was am PB7 passiert... Eine Messung per Multimeter oder LED mit 1K Vorwiderstand ist deutlich einfacher und schneller.
Was ist dass denn für ein Relais? Wenn es DIREKT am PORT hängt, muss es schon recht sparsam sein. 5V Relais mit weniger als 20mA sind eher selten. Ansonsten siehe Relais mit Logik ansteuern
Christian Peskov schrieb: > Viel übrig bleibt mir ja auch nicht... wenn das dann auch ngeht, werde > ich das relais wohl auslöten und gucken was am PB7 passiert... Ein ordenliches Relais hat eine integrierte Freilaufdiode. Christian Peskov schrieb: > das war falsch, weil ich hatte bei der ursprungsplatine gegen 5 V > geschaltet und nun gegen Masse... Dann muss das Relais auch umgedreht werden. mfg.
jau... danke danke an alle... es geht... Danke vorallem auch an holger. Das hätte ewig gedauert, bis mir das aufgefallen wäre ^^ der Spulen-Vorwiderstand war dann noch zu groß... falk.. also an den headers hat es nicht gelgen... das trenne ich aber als bald... beim prgrommieren ist es nur leider einfacher erst alles in eine Datei zuschreiben... dein MegaMove für meine Relais_togglefunktion, ist das so: ? relaisport wie vorher nur das eine Bit nigieren! ? @thomas: das Relais hat keine Polung im Datenblatt angegeben, daher denke ich, dass diese egal sein sollte... beste grüße aus bochum
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.