2 atmega einen als porterweiterung

OP #3562374
Lesenswert?

Hallo,
Meine Frage ist es wenn ich 2 atmega habe ob ich dann einen als eine art 
porterweiterung benutzen kann, wenn ja wie oder wie heißt die Methode.

PS:
Falls die Frage kommt, nein ich will nicht mit Schieberegistern arbeiten 
da ich schon 2 atmegas in meiner schaltung eingebaut haber
Danke schonmal im Vorraus
Gast #3562383
Lesenswert?

Julian Bertsch schrieb:
> Meine Frage ist es wenn ich 2 atmega habe ob ich dann einen als eine art
> porterweiterung benutzen kann, wenn ja wie oder wie heißt die Methode.

Ja, das kannst du machen. Jenachdem ob du die Ports schreiben, lesen 
oder schreiben und lesen willst brauchst du eine unidirektionale oder 
bidirektionale Verbindung. Die Verbindung kannst du z.b. mittels I2C, 
SPI oder UART herstellen. Das beherrschen die beiden Atmega in Hardware 
und nehmen dir so eine Menge Arbeit ab. Du kannst dir aber auch 
irgendein krudes Protkoll selber ausdenken ;)
Gast #3562388
Lesenswert?

du nimmst einen atmega als Master der dem anderen als Slave sagt, welche 
Ports er wie schalten soll. Kommunikation z.B. über 1-Wire. Dafür 
benötigst du ein Protokoll, welches vom Master gesendete Bitfolgen in 
Schaltanweisungen  des Slaves umsetzt.
#3562395
Lesenswert?

Julian Bertsch schrieb im Beitrag #3562390:
> Wie mache ich das dann genau?

Ich hätte eine Idee:
Master sendet über z.B. SPI den write oder read Befehl und die Adresse 
des Registers. Dann wartet der Slave entweder auf das byte, das er in 
diese Adresse schreiben soll, oder sendet den Inhalt dieser Adresse.
Gast #3562449
Lesenswert?

Julian Bertsch schrieb:

> Meine Frage ist es wenn ich 2 atmega habe ob ich dann einen als eine art
> porterweiterung benutzen kann

Natürlich.

> wenn ja wie oder wie heißt die Methode.

Es wird dich vielleicht erstaunen, das sowas geht: Nachdenken und das 
Erdachte durch Programmieren umsetzen. Jaaa, das ist was ganz anderes, 
als immer nur geklauten Code zusammenzukopieren...
Gast #3562535
Lesenswert?

Karl Heinz schrieb:
> So wie der TO fragt, würde ich ihm die UART ans Herz legen.
> Grund: dafür gibt es ausreichen gute Tutorien, wie man die benutzt.

Klar aber die gibts für SPI und I2C doch auch. Wäre cool wenn der OP 
sich mal äußern würde ob er nur Ausgänge setzen oder auch Eingänge lesen 
will.
OP #3562616
Lesenswert?

Eumel schrieb:

> Ok, haben deine beiden Controller einen Quarz als Taktquelle?

Keinen externen Quarz.
Ich habe mich schon mit UART auseinandergesetzt und kann bytes 
verschicken und empfangen jedoch ist die kommunikation sehr langsam und 
ich will damit eine 16x16 matrix ansteuern und da flackert das bild 
stark und ich habe noch das problem dass wenn ich erst eine led die 
mindestens mit einem pin am 2.controller hängt anschalte dann wieder 
ausschalte und danach eine die am ersten hängt geht eine ander mit an. 
Also wenn zeile 16 an mc1 liegt und ich will die led in reihe 1 zeile 16 
anschalten und led in reihe 9 zeile 1 wobei reihe 9 an mc2 hängt dann 
leuchtet die led in reihe 16 zeile 1 auch obwohl ich die entsprechenden 
reihen und zeilen immer erst für 0,1 ms anschalte und danach wieder aus 
bevor die nächste kommt.
PS: Sry dass ist jetzt vlt. ein bischen verwirrend aber ihr könnt ja 
fragen
und ich kann ja ein bild von dem gerät schicken in dem zustand den ich 
meine
Angehängte Dateien:
#3562645
Lesenswert?

Du bist doch schon länger dabei und kriegst das nicht zum Laufen. Tu dir 
selber den Gefallen und steck das Teil dahin, wo es hingehört: In die 
Tonne.
Und dann machst du das komplett neu. Mit einem Controller und ein paar 
Schieberegistern. Denn was Murks ist, ist nicht mit noch mehr Murks zu 
retten. Und besonders hübsch sieht die Platine ja auch nicht aus.

mfg.
OP #3562649
Lesenswert?

Thomas Eckmann schrieb:
> Du bist doch schon länger dabei und kriegst das nicht zum Laufen. Tu dir
> selber den Gefallen und steck das Teil dahin, wo es hingehört: In die
> Tonne.
> Und dann machst du das komplett neu. Mit einem Controller und ein paar
> Schieberegistern. Denn was Murks ist, ist nicht mit noch mehr Murks zu
> retten. Und besonders hübsch sieht die Platine ja auch nicht aus.
>
> mfg.

Es ist ein Schulprojekt und ich habs für längere Zeit auf die Seie 
gelegt und fange grade wieder an mich damit zu beschäftigen
#3562826
Lesenswert?

Julian Bertsch schrieb:

> Keinen externen Quarz.
> Ich habe mich schon mit UART auseinandergesetzt und kann bytes
> verschicken und empfangen jedoch ist die kommunikation sehr langsam und
> ich will damit eine 16x16 matrix ansteuern und da flackert das bild
> stark

Du bist doch der mit dem Pong-Spiel. Oder nicht?

Wenn bei den wenigen Einschalt/AUsschalt Vorgängen da tatsächlich was 
flackert, dann machst du in deinem Programm grundsätzlich etwas 
grauslich falsch. Selbst mit einer relativ kleinen Baudrate flackert da 
nichts, solange man über die UART nur das überträgt was tatsächlich 
notwendig ist. Alles was sich in der LED-Matrix des anderen Mega nicht 
verändert, braucht auch nicht übertragen werden.

> und ich habe noch das problem

Dein eigentliches Problem ist, dass du 2 µC einsetzt, wo einer alleine 
locker reicht (ev. mit einem Schieberegister als Porterweiterung, wenn 
die Pins nicht reichen). So einen Systemaufbau, wie du ihn gemacht hast, 
den macht man einfach nicht ohne Not. Ud jetzt weißt du auch warum.

Aber ok. Die Hardware ist nun mal da.
Tja. Da würde ich sagen, dann hast du noch mindestens einen anderen 
Fehler im System. Entweder Hardware oder Software. Oder auch beides.
OP #3562886
Lesenswert?

Problem gelöst ich hab so dass wenn ich was vom 2. brauch dann soll er 
über uart einen wert schicken dieser wird vom anderen verwertet(pins an 
danach wieder ausgeschalten) dann wird vom 2. wieder ein wert über uart 
geschickt der erste wartet auf diesen wert bis er weiter macht dann wird 
dem 2. wieder n wert geschickt dass er aufhören kann die pins ein und 
danach wieder ausgeschalten dann wird vom 2. wieder n wert zum ersten 
gesschickt wieder dass er fertig ist und der erste wartet wieder auf 
diesen wert
Flackert jetz aber noch heftig
#3562980
Lesenswert?

und wenn du das ganze ohne viel Softwareaufwand lösen möchtest. Nimmst 
du ein einen Latch Baustein. dieser wird parallel an einen Port 
geklemmt.

Jetzt kannst du z.B. ein Bitmuster über den Port ausgeben es den Latch 
übernehmen lassen (1 zusätzlicher Pin wird benötigt) danach gibt der 
Latch das an seinen Ausgängen aus und du kannst den Port anderweitig 
nutzen da man die Eingänge des Latch hochohmig schalten kann (noch ein 
Pin nötig) und Sie deine Schaltung dann nicht weiter belastet, ist also 
wie wenn du den Latch wieder abklemmst.

Denn Latch kann man dann auch anders rum verwenden um z.B. die Eingänge 
zu erweitern.

Hier mal eine kleine Beschreibung wobei du dir auch das Datenblatt vom 
Hersteller ansehen solltest. Da dieser Vielbeiner noch ein paar Sachen 
kann die hier nicht beschrieben werden.
http://www.mikrocontroller.net/attachment/18129/THEMENBLATT_PORTERWEITERUNG.PDF
#3565356
Lesenswert?

Wäre es zuviel verlangt wenn du dir mal schnell anschaust was eigentlich 
| und & bzw. |= und &= tun und WARUM sie zum setzen und löschen von Bits 
verwendet werden? Und das mal in 2 Minuten auf nem Fetzen Papier 
nachvollziehst.
Ich kann nicht fassen dass man hier Projekte mit Matrix und 2 
Controllern aufziehen will, aber die Grundlagen weder kennt, noch 
nachschlägt wenn man sie braucht, sondern hier ständig einen auf 
Blindflug und try&error macht.
OP #3565366
Lesenswert?

1
DDRD = (1<<7);
2
PORTD |= (1<<DDD7);
3

4

5

6

7
DDRC = (1<<DDC0) | (1<<DDC1) | (1<<DDC2) | (1<<DDC3) | (1<<DDC4)| (1<<DDC5) | (1<<DDC6) | (1<<DDC7);
8
PORTC |= (1<<DDC0) | (1<<DDC1) | (1<<DDC2) | (1<<DDC3) | (1<<DDC4)| (1<<DDC5) | (1<<DDC6) | (1<<DDC7);
9

10
DDRB = (1<<DDB0) | (1<<DDB1) | (1<<DDB2);
11
PORTB |= (1<<DDB0) | (1<<DDB1) | (1<<DDB2);
12
DDRA = (1<<DDA0) | (1<<DDA1) | (1<<DDA2) | (1<<DDA3) | (1<<DDA4) | (1<<DDA5) | (1<<DDA6) | (1<<DDA7);
13
PORTA |= (1<<DDA0) | (1<<DDA1) | (1<<DDA2) | (1<<DDA3) | (1<<DDA4) | (1<<DDA5) | (1<<DDA6) | (1<<DDA7);
14

15

16
PORTC |= (1<<DDC0) | (1<<DDC1) | (1<<DDC2)  | (1<<DDC3) | (1<<DDC4) | (1<<DDC5) | (1<<DDC6) | (1<<DDC7);
17

18
PORTC &= ~(1<<0);
19
PORTC &= ~(1<<1);
20
PORTC &= ~(1<<2);
21
PORTC &= ~(1<<3);
22
PORTC &= ~(1<<4);
23
PORTC &= ~(1<<5);
24
PORTC &= ~(1<<6);
25
PORTC &= ~(1<<7);
26

27
PORTD &= ~(1<<7);
28
  
29
PORTB &= ~(1<<0);
30

31
PORTB &= ~(1<<2);
32

33
PORTB &= ~(1<<1);
34

35
PORTA &= ~(1<<0);
36
  
37
PORTA &= ~(1<<1);
38

39
PORTA &= ~(1<<2);
40

41
PORTA &= ~(1<<3);
42

43
PORTA &= ~(1<<4);
44

45
PORTA &= ~(1<<5);
46

47
PORTA &= ~(1<<6);
48

49
PORTA &= ~(1<<7);
#3565370
Lesenswert?

Max H. schrieb:
> Das möchte ich sehen, wie du manche Ausgänge mit |= löschen kannst...
> Mit |= kann man bist nur setzten oder unverändert lassen.

Er meint ja auch nicht das Bit-Setzen oder -Löschen. Er will die LED in 
der Matrix ein- oder ausschalten. das ist dann für Zeiele anders als für 
Spalte.

Er soll halt den ganzen Misst in die Tonne klopfen. Wenn meine Schüler 
so einen Dreck abliefern würden, wo ich ja hier mitlesen kann wie 
störrisch an einem schlechten Entwurf herumgedoktert wird, die schlechte 
Bewertung ist da wohl klar?
#3565801
Lesenswert?

Julian Bertsch schrieb:
> Ich hab kein Schaltplan gemacht sondern direkt das platinenlayout aus
> zeitdruck
Wenn du dieses Postest, könnte das ein Anfang sein. Und am besten nicht 
ein Foto, sondern einen Screenshot aus dem Layoutprogramm, auf dem man 
Leiterbahnen und Bauteile sehen kann.

Und das soll viel schneller sein?
Diese 30 Bauteile hat man in einer Stunde verkabelt, und das Verkabeln 
ist als Schaltplan einfacher als im Layout. Man muss nicht nachschauen: 
PD5, welche Pinnummer hatte der nochmal...

Julian Bertsch schrieb:
> Schulprojekt
Und was sagt der Lehrer wenn du nicht mal einen Schaltplan hast?
OP #3566405
Lesenswert?

Ich werde heute noch n schaltplan erstellen und hier posten und ich geb 
ja zu das es ziemlicher murks ist aber man muss halt verstehen dass ich 
zum erstenmal was mit mikrocontrollern mache und mich überschätzt habe 
aber es ist jetz halt so und die mcs sind wie schonmal nichtmehr 
ansprechbar
Gast #3566447
Lesenswert?

Falls es die Möglichkeit gibt, eine neue Platine zu fertigen, ist es 
schneller, wenn man es noch einmal ordentlich macht: 2. ATmega durch 2x 
74HC595 ersetzen. Die ICs solltes man Sockeln und Sachen wie 
Spannungsregler und Entkoppelkondensatoren einplanen.
Ich denke, dass er, wenn er jetzt anfängt, heute noch fertig wird mit 
Layout und Schaltplan.
Mit dem Wissen des TE wird es IMHO lange dauern, bis die beiden ATmegas 
miteinander kommunizieren.
#3566615
Lesenswert?

Julian Bertsch schrieb:
> is halt zum großteil nur aus pads erstellt unsauber ich weis

Soll das jetzt der Schaltplan sein? Ist doch nur wieder das Layout.

Und warum hast du keine passenden libs für deine Bauteile genommen, 
statt nur Pads? Eigentlich hätte deine Arbeit wegen unsagbar schlampiger 
vorgehensweise auf allen Ebenen, eine 3-4 verdient. Höchstens. WENN sie 
am Ende tadellos funktioniert.

gruß cyblord
OP #3567474
Lesenswert?

So ich hab das Problem jetz gelöst, also sie hatten sich von alleine 
verfused und auf externen quarzgesetzt jedoch hatte ich ab und zu 
verbindung zu dem einen Controller bekommen und hab ihn so programmiert 
dass er den einem port togglet und diesen port hab ich dann mit XTAL1 
des anderen verbunden, weil er da immer auf einen taktgeber gewartet hat 
und dann hab ich ihn erkennen lassen und es hat geklappt danach habe ich 
die fuses wieder auf standart gesetzt und noch jta abgeschalten trotzdem 
danke für eure Hilfe bisher
Gast #3567495
Lesenswert?

Hi

>So ich hab das Problem jetz gelöst, also sie hatten sich von alleine
>verfused und auf externen quarzgesetzt...

Ein solches Eigenleben habe ich bei AVRs noch nie erlebt.

>jedoch hatte ich ab und zu
>verbindung zu dem einen Controller bekommen und hab ihn so programmiert

Klingt wie halbschwanger und ist genauso wahrscheinlich.

>is halt zum großteil nur aus pads erstellt unsauber ich weis

In deinem Layout sind die Stromversorgungsanschlüsse nicht vollständig 
beschaltet.

MfG Spess
#3567526
Lesenswert?

Hi Julian,

dein Problem ist, das eine 16x16 Matrix im Multiplexbetrieb 4x8bit Ports 
benötigt, die deine CPU auch bietet, du dann aber keine Pins mehr frei 
hast,
Bedienelemente und ISP anzuschliessen. 12 Pins bekommst du frei, wenn du 
2 Ports für den "Bildinhalt" einer Zeile benutzt, und von einem Port 4 
Pins an einen 74HC154 4-16 Decoder anschliesst und darüber die Spalten 
steuerst.
ISP und Matrixsteuerung kann doppelt auf einem Port belegt werden, so 
hast du noch 12 Pins frei für Taster usw...

Gruß,

dasrotemopped.

PS : 2 CPUs koppeln geht auch, wenn du eine CPU für die Zeilen und eine 
für die Spalten benutzt. Aber warum so umständlich, wenns auch einfach 
geht.

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