Hallo Leute, ich brauche dringend Hilfe, und zwar habe ich folgendes Problem: ich will eine Master(Receiver) Slave(Transmitter) Kommunikation zwischen 2 µC herstellen. Der Slave soll einen Low Pegel(PINA0 von atmega32 soll dabei verwendet werden) an den Master schicken, damit weiss dann der Master, dass der Slave Daten an ihn schicken möchte. Nimmt der Master diese Anfrage an und schickt Daten an den Slave so soll der Pegel high werden. ich habe hier einen Codebeispiel, weiss aber absolut nicht wie ich das da einbauen kann. kann mir da vllt jmd helfen?
no name schrieb: > Hallo Leute, > ich brauche dringend Hilfe, und zwar habe ich folgendes Problem: > ich will eine Master(Receiver) Slave(Transmitter) Kommunikation zwischen > 2 µC herstellen. Der Slave soll einen Low Pegel(PINA0 von atmega32 soll > dabei verwendet werden) an den Master schicken, damit weiss dann der > Master, dass der Slave Daten an ihn schicken möchte. Nimmt der Master > diese Anfrage an und schickt Daten an den Slave so soll der Pegel high > werden. ich habe hier einen Codebeispiel, weiss aber absolut nicht wie > ich das da einbauen kann. kann mir da vllt jmd helfen? Wie, du weißt nicht, wie man einen Pin gezielt auf 0 bzw. 1 setzt, bzw. einen Pin abfragt? Dann solltest du noch nicht mit I2C rummachen.
no name schrieb: > wie ich diese demotivierenden Sätze liebe :-/ Das mag schon sein. Aber was soll man ihm sonst sagen? Du hilfst niemandem damit, der gerade mal mit Stützrädern radfahren kann, wenn du ihn ermunterst, beim Radrennen "rund um den Henninger Turm" mitzumachen. Erst muss man krabbeln lernen, dann gehen, dann laufen und erst dann ist man reif für seinen ersten Marathon. Keine einzige der Stufen kann übersprungen werden. Zumal wir hier davon reden, einen Pin gezielt auf 0 zu setzen und wenn danach über TWI was reinkommt, den Pin wieder auf 1 zu setzen. Also eine Variation der allerersten Programme: Led ein/ausschalten.
ja und du willst mir dabei nicht helfen oder wie verstehe ich das?? ich mein den Code den ich geschickt habe verstehe ich ja, wie man pins auf 0 oder 1 setzt ist mir auch klar, nur weiss ich nicht genau wie ich eine anfrage an den master senden soll. Ich denke vllt zu kompliziert und vllt würde mich ein wort ein satz ein hinweis weiter bringen. Aber wenn man solche kommentare liest hat man dann kein bock mehr weiter zu machen und das ist doch schade oder??
no name schrieb: > ja und du willst mir dabei nicht helfen oder wie verstehe ich das?? > ich mein den Code den ich geschickt habe verstehe ich ja, wie man pins > auf 0 oder 1 setzt ist mir auch klar, nur weiss ich nicht genau wie ich > eine anfrage an den master senden soll. Du sendest gar keine Anfrage. Der Slave sendet von sich aus überhaupt nicht. Du setzt den Pin und damit die Leitung auf 0 und da die Leitung zum Master führt, fragt der irgendwann den Pegel ab und fängt daraufhin an, mittels TWI rauszufinden, was der Slave eigentlich will. (Aus Sicht des Slave ist die Leitung eine LED die er ein/ausschaltet. Aus Sicht des Master ist an der Leitung ein Taster, der gedrückt wird. Einfach nur ein Stück Draht von einem µC zum anderen. Der SLave schaltet die Leitung auf 0 oder 1 und der Master sieht sich an, welcher Pegel vorliegt) Das ist wie: Wenn du haben willst, dass dein Kumpel dich anruft, dann ziehst du eine Fahne am Fahnenmast hoch, aber du rufst ihn nicht an. Du hast als Slave nicht das Recht dazu. Er ist der Master, du der Slave. Jegliche TWI Kommunikation geht von ihm aus. Er ruft dich an, nicht du ihn.
hmm.. ich dachte, dass der Slave durch den einen Pin eine Anfrage an den Master sendet und er dann darauf reagiert, denn der Slave soll in unregelmäßigen Abständen Daten senden..
Wozu brauchst du die extra Leitung? Der Master schickt dem Slave ein Zeichen, darauf Antwortet der Slave, fertig. Bei I2C habe die Teilnehmer doch Adressen, da brauchst du keine CS oder EN Leitung... Wenn der Slave von sich aus einfach Daten sendet, solltest du dein Master-Slave Konzept überprüfen. Gruß aus Berlin
no name schrieb: > hmm.. ich dachte, dass der Slave durch den einen Pin eine Anfrage an den > Master sendet streich einfach das Wort 'senden' und du bist dort. Der Slave sendet nichts. Der Slave zieht einfach einen Portpin auf 0. UNd das wars dann schon. Damit weiß der Master (wenn er die Leitung abfragt und dort die 0 vorfindet) dass er sich mit diesem Slave beschäftigen muss. Slave:
1 | int main() |
2 | {
|
3 | ....
|
4 | |
5 | |
6 | while( 1 ) { |
7 | |
8 | if( irgendwas ist vorgefallen, was der Master wissen muss ) |
9 | PORTA &= ~( 1 << PA0 ); |
10 | |
11 | |
12 | if( der Master hat den Vorfall abgefragt ) |
13 | PORTA |= ( 1 << PA0 ); |
14 | |
15 | ....
|
16 | }
|
17 | }
|
(Sicherheitshalber wird man die Reaktion auf das Abfragen direkt in die TWI Routinen einbauen, aber im Grunde wars das aus Slave Sicht. Master:
1 | int main() |
2 | {
|
3 | ....
|
4 | |
5 | while( 1 ) { |
6 | |
7 | if( !(PINC & ( 1 << PC4 )) ) // der Slave will was |
8 | {
|
9 | .... frag den Slave per TWI was er will |
10 | }
|
11 | }
|
12 | }
|
(Annahme: Die Leitung geht vom Slave, Port A/Pin 0 zum Master Port C/Pin 4) Kann man so machen, muss man nicht. Normalerweise fragt der Master einfach reihum alle Slaves: Hast du was für mich?
das konzept sieht folgendermaßen aus: zunächst muss die Leitung auf low gelegt werden, dann soll der master die Start-Bedingung plus SLA +R an den Slave senden, daraufhin wird geprüft, ob der Slave ein ACK sendet, wenn ja geht die Leitung auf high, wenn nicht wird eine Error Message gesendet. Ist die Leitung high, sendet der Slave seine Daten an den Master. Sendet der Master einen NACK wird die Kommunikation beendet. Und anschließend folgt die Stop - Bed. seitens des Masters.
Oder ist mit dem Pin ein zusätzliches Interrupt-Signal gemeint? Hat der Slave etwas, was sich der Master holen kann, gibt er ein Signal (Low). Daraufhin sendet der Master seine Anforderung (und holt ggf Daten ab). Nachdem die Anforderung vom Slave verstanden wurde, setzt er das Signal wieder auf High.
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.