Hallo Leute! Ich programmiere seit drei Tagen mit viel Freude an einem ATtiny45 (20PU) rum. Habe schon mehrere Sachen (z.B. eine Ampelschaltung, Taschenrechner der + und - kann und eine "Morse-Alphabet-Ausgabe"). Es ist für mich nicht soo eine große Herausforderung, da ich aus dem C-Milieu komme. Aber, nun habe ich doch eine Frage. Ich dachte mir, man muss doch irgendwie zwei ATtinys verbinden können? Also, wenn ich jetzt z.b. einen kleinen Rechner programmieren will: Nur kurz, zur Erinnerung: - RESET VCC - - PB3 PB2 - - PB4 PB1 - - GND PB0 - Wenn ich nun am 1. ATtiny eine Taste an PB3 hänge, mit der ich eine Zahl auswählen kann (mitzählen, wie oft gedrückt wurde!), an PB4 eine "Ist gleich"-Taste, an PB2 eine LED für die Ausgabe des Ergebnisses (die LED blinkt so oft, wie das ergebnis dass rauskommt. 2 Sekunden dauerleuchten am Anfang heißt dass die Zahl negativ ist, 5 Sekunden dauerleuchten heißt, dass 0 rauskommt). An PB0 hänge ich den 2. ATtiny an. An diesem hängen wiederum vier Taster. Einer für +, einer für -, einer für * und einer für /. Die Frage ist nur... wie übertrage ich dem 1. ATtiny WELCHE Taste gedrückt wurde? Habe zum Testen mal folgendes versucht: Programm für 1. ATTiny: #include <avr\io.h> int main() { DDRB = 0xFF; DDRB &= ~(1<<PB0); // PB0: Schalter zum Senden DDRB &= ~(1<<PB1); // PB1: Empfang vom 2. ATtiny PORTB = 0xFF; int sent = 0; int returned = 0; while (1) // Sobald der 2. ATtiny Rückmeldung gegeben hat, Programm beenden { if (returned == 0) { int pressed = (PINB & (1<<PB0)); // Wenn der Schalter gedrückt wurde, senden if (pressed == 0) { PORTB &= ~(1<<PB2); // Über PB2 ein Signal an den 2. ATtiny schicken sent = 1; } } else if (sent == 1) { int received = PINB & (1<<PB1); if (received == 0) { PORTB |= (1<<PB2); // Übertragung an den 2. ATtiny stoppen } } } return 1; } Programm für 2. ATTiny: #include <avr\io.h> int main() { DDRB = 0xFF; DDRB &= ~(1<<PB0); // PB0: Empfang vom 1. ATtiny PORTB = 0xff; int received = 0; while (1) { if (received == 0) { int pressed = PINB & (1<<PB0); // Signal vom ATtiny if (pressed == 0) // --> Signal empfangen { PORTB |&= ~(1<<PB2); // Über PB2 ein Signal an den 1. ATtiny schicken received = 1; } } else if (received == 1) { PORTB &= ~(1<<PB1); } } return 1; } Jedoch leuchtet die LED (die am 2. ATtiny auf PB1 hängt) sofort auf! Entferne ich die Zeile PORTB &= ~(1<<PB1), leuchtet sie nicht auf... :( Hoffe mir kann jemand erklären, wie ich Bitfolgen übertrage (eigentliche Fragestellung), und vor allem was an meinem Test für das eigentliche Beispiel falsch ist... Vielen Dank im Vorhinein, und vor allem ein Dankeschön, dass ihr euch bis hierher durchgekämpft habt! Lg Marc
lass die ein 1drahtbus system einfallen darüber übertägst du dann daten von einem auf den anderen oder .. man nimmt einen anderen µC solll ja auch welche mit mehreren ports geben
Das mit dem Bussystem war ja meine eigentliche Frage. Wie kann ich ein dementsprechendes System schreiben, dass mir ganze Bitfolgen übertragen kann? Ich bräuchte irgendwie einen kleinen "Geistesblitz", der mir dabei helfen könnte, sowas zu entwickeln... Und: ich werde mir demnächst einen ATmega16 holen ;) Aber trotz allem wäre es interessant, so ein System zu schreiben :) Lg Marc
Hallo, es gibt viele Methoden: Manchester Code. http://de.wikipedia.org/wiki/Manchester-Code 1-wire: http://de.wikipedia.org/wiki/1-Wire Um mal zwei zu nennen. Gruß Klaus
Hardware-seitig kannst du das USI im 3-wire oder 2-wire-Modus verwenden. Damit hast du schon mal die Hardware, um Bytes seriell weitgehend automatisch zu übertragen, brauchst aber auf beiden MCs 2 Pins.
hallo, ich benutze zur Datenübergabe zwischen 2 mc eine Übertragung ähnlich DCF77-protokoll: Pause von 1,5 sek als Startkennung, dann im Sekundentakt, 8 oder 16 Bits, Impuls kleiner 0,5 Sek bedeutet Log. 0, länger als 0,5 Sek bedeutet log. 1. Die Zeiten sind nur Beispielwerte, können kleiner sein. Damit übertrage ich auch Daten zwischen einer SPS und einem ATMEGA8. An einigen ATTiny45 benutze ich dies mit den angegebenen Zeitwerten als Ausgabe zum kontrollieren von Werten, Anzeige über eine LED. Gruß Klaus
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.