paulspiegel
24.12.2006, 20:27
Hallo die Herren,
ich habe ein Problem mit Bitmanipulation und kann mir einfach nicht erklären wo der Fehler ist. Kann mir eventuell jemand weiter helfen?
Ich habe 12 Platinen die alle gleich sind. Auf jeder Platine ist ein Atmega 8 und 8 Ausgangsrelais. Das Eingangssignal liegt an allen 12 Platinen gleichzeitig auf 8 PINS an. Anhand einer HEX Codierung kann ich auswerten für welche Platine welcher Befehl ist. Mit PINC5 werden dann die Daten übernommen und die jeweiligen Relaisausgänge angesteuert.
Auf allen 12 Atmegas soll das gleiche Programm sein. Die Auswahl welche auf welcher Platine welches Unterprogramm mit entprechendem HEX Code läuft wird über einen DIP-Schlater auf der Platine ausgewählt. PINC0 – PINC3 frei Codierbar 4 DIP-Schalter (Platine 1-12).
Wenn einer dieser DIP-Schalter betätigt ist liegen an den Eingangspins 5 V an. Je nach dem wie die PINS Spannung haben habe ich 16 verschiedene Codiermöglichkeiten. Je nach Codierung möchte ich den Zustand der 4 Eingänge abfragen und in ein Byte von Bit 0 Bit 3 schreiben, der Rest des Byte´s soll Null sein (Funktion Platinenerkennung Byte auswahl).
Das jetzt beschriebene Byte soll dann mit Hilfe von switch Case den entsprechenden Wert zurück geben (müsste auch ohne die Switch case nur mit return auswahl funktionieren).
Anhand des Rückgabewertes, wird dann über switch case die Funktion Platine aufgerufen.
Im Programm Platine in der das eigentliche Eingangsdatenübernahmeprogramm läuft.
Mein Gedanke war, dass dies gleich wie bei den Ports funktionieren müsste, aber irgendwie übernimmt er die Bits bei den Bitmanipulationen nicht richtig. Ich hab´s schon mit Bitabfrage direkt und über if Schleife probiert, aber beides geht nicht.
Ich denke beim Einlesen der Signale in die Variable auswahl und Eingang (Hier werden die Anleigenden Einganssignale eingelesen) mache ich beidesmal den gleichen Fehler, was auch immer der Fehler ist. Beim Simulieren überspringt die Simualtion auch jedes Mal Befehlszeilen in den beiden Einlesefunktionen. Muss ich eigentlich auch die Bits in der Variable wieder zurücksetzen wie bei den Ausgängen, bevor mein nächstes Eingangssignal kommt und korrekt eingelesen werden kann?
Kann mir bitte jemand weiterhelfen und sagen was ich falsch mache? Wäre sehr nett
ich habe ein Problem mit Bitmanipulation und kann mir einfach nicht erklären wo der Fehler ist. Kann mir eventuell jemand weiter helfen?
Ich habe 12 Platinen die alle gleich sind. Auf jeder Platine ist ein Atmega 8 und 8 Ausgangsrelais. Das Eingangssignal liegt an allen 12 Platinen gleichzeitig auf 8 PINS an. Anhand einer HEX Codierung kann ich auswerten für welche Platine welcher Befehl ist. Mit PINC5 werden dann die Daten übernommen und die jeweiligen Relaisausgänge angesteuert.
Auf allen 12 Atmegas soll das gleiche Programm sein. Die Auswahl welche auf welcher Platine welches Unterprogramm mit entprechendem HEX Code läuft wird über einen DIP-Schlater auf der Platine ausgewählt. PINC0 – PINC3 frei Codierbar 4 DIP-Schalter (Platine 1-12).
Wenn einer dieser DIP-Schalter betätigt ist liegen an den Eingangspins 5 V an. Je nach dem wie die PINS Spannung haben habe ich 16 verschiedene Codiermöglichkeiten. Je nach Codierung möchte ich den Zustand der 4 Eingänge abfragen und in ein Byte von Bit 0 Bit 3 schreiben, der Rest des Byte´s soll Null sein (Funktion Platinenerkennung Byte auswahl).
Das jetzt beschriebene Byte soll dann mit Hilfe von switch Case den entsprechenden Wert zurück geben (müsste auch ohne die Switch case nur mit return auswahl funktionieren).
Anhand des Rückgabewertes, wird dann über switch case die Funktion Platine aufgerufen.
Im Programm Platine in der das eigentliche Eingangsdatenübernahmeprogramm läuft.
Mein Gedanke war, dass dies gleich wie bei den Ports funktionieren müsste, aber irgendwie übernimmt er die Bits bei den Bitmanipulationen nicht richtig. Ich hab´s schon mit Bitabfrage direkt und über if Schleife probiert, aber beides geht nicht.
Ich denke beim Einlesen der Signale in die Variable auswahl und Eingang (Hier werden die Anleigenden Einganssignale eingelesen) mache ich beidesmal den gleichen Fehler, was auch immer der Fehler ist. Beim Simulieren überspringt die Simualtion auch jedes Mal Befehlszeilen in den beiden Einlesefunktionen. Muss ich eigentlich auch die Bits in der Variable wieder zurücksetzen wie bei den Ausgängen, bevor mein nächstes Eingangssignal kommt und korrekt eingelesen werden kann?
Kann mir bitte jemand weiterhelfen und sagen was ich falsch mache? Wäre sehr nett