Atmega8 PB7 als Ausgang für Relais

OP #2999531
Lesenswert?

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
Angehängte Dateien:
OP #2999743
Lesenswert?

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...
#2999753
Lesenswert?

@  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.
OP #2999790
Lesenswert?

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...
#2999811
Lesenswert?

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.
OP #2999849
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren