Archiv verlassen und diese Seite im Standarddesign anzeigen : Fehler in Schaltplan von M32?
proevofreak
07.12.2009, 10:56
hallo leute, bin gerade auf der suche nach einem interrupt- eingang auf der M32. nun gibt es bei den freien I/O- ports zwei freie interrupteingänge.
nun ist mir aber aufgefallen, dass PD3 im schaltbild des M32 µc mit INT1 und PD2 mit INT0 beschriftet sind. allerdings sind rechts daneben PD3 mit INT2 und PD2 mit INT1 beschriftet.
ist das jetzt absicht oder ist das ein fehler?
weil in der funktionsbibliothek der M32 werden in initRP6Control() wiederum PD3 mit INT1 und PD2 mit INT0 deklariert.
wer kann mir sagen, was jetzt eigentlich stimmt?
mfg andi
allerdings sind rechts daneben PD3 mit INT2 und PD2 mit INT1 beschriftet. mach mal n screenshjot, ich bin grad das datenblatt durchflogen und kann eine ederartige darstellung nicht finden! es ist IMMER PD2 - INT0
jedenfalls stimmt es dass PD2 INT0, PD3 INT1 und PB2 INT2 ist .... oder hast dich evtl. verlesen udn hast PB2 mit PD2 verwechselt ?
sehr verwirrend ^^ sag erstmal von welchem dokument du redest und macht wie gesagt evtl. nen screenshot/foto
oberallgeier
07.12.2009, 11:15
Hallo andi, Nachbar,
... interrupt- eingang auf der M32 ... PD3 mit INT1 und PD2 mit INT0 deklariert ... sagen, was jetzt eigentlich stimmt ...Die wirklich verbindliche Aussage steht natürlich im Datenblatt des Herstellers. Aktuell ist es das 8155B–AvR–07/09. (http://www.atmel.com/dyn/resources/prod_documents/doc8155.pdf) Da drin steht - z.B. auf Seite 2 das, was ja nicht unbekannt ist: einen Int2 gibts garnicht am Port D. Also richtig ist: PD2 ist INT0 und PD3 ist INT1 (weil die Zählweise bei den Controllern ja doch fast immer mit der Null anfängt). Alles klar jetzt?
Hallo,
die Pins am XBUS Steckverbinder heissen INT1 - INT3 und INTU (U=User = nicht belegt kann frei belegt werden). Wurde einfach so definiert.
Die Bezeichnungen haben nichts damit zu tun wie die Interrupts vom MEGA32 intern belegt sind. Am XBUS kann ja beliebige Hardware angeschlossen werden, nicht nur das MEGA32 Erweiterungsmodul.
Die INTx Leitungen sind dafür vorgesehen das I2C Slave Hardware Module eine Zustandsänderung signalisieren können ohne über den I2C Bus abgefragt werden zu müssen. Die Reaktionszeit kann so verkürzt und die Buslast drastisch reduziert werden (sonst müsste ja alle x-Millisekunden eine Anfrage gesendet und beantwortet werden...).
Beim M32 Board wird standardmäßig eine der Interrupt Leitungen verwendet (und die muss vom Programm nichtmal als Interrupt behandelt werden, polling reicht schon völlig).
Nämlich die vom Controller auf dem Mainboard. Wie das verwendet wird sieht man in den Beispielprogrammen.
Z.B. wenn das ACS ein Hindernis erkennt, wird über INT1 signalisiert das sich "irgendwas" geändert hat. Der Master kann dann über den Bus abfragen was denn genau los war und drauf reagieren...
MfG,
SlyD
PS:
Du kannst die Interrupt Belegung auf dem M32 Modul sogar ÄNDERN! Da ist ein nicht bestücktes Jumperfeld auf dem M32 Modul (I1, I2, I3, INT1, INT2, INT3, INTU, welche Pins standardmäßig verbunden sind ist weiss gekennzeichnet - man kann hier die Leiterbahn zwischen den Pads auftrennen bei Bedarf)
proevofreak
07.12.2009, 19:41
hallo,
hier nochmal zum besseren verständnis meiner anfrage der schaltplan der M32:
http://rapidshare.de/files/48802881/RP6_CONTROL_M32.pdf.html
wenn ihr den genau an der stelle der portbelegung des M32 µc anschaut, werdet ihr das gleiche feststellen wie ich.
im controller- blockschaltbild steht PD3 (INT1) und PD2(INT0). Rechts daneben steht allerdings bei Pin von PD2(INT1) und am Pin von PD3(INT2).
in der funktionsbibliothek wird allerdings PD3 mit INT1 und PD2 mit INT0 deklariert.
liege ich mit meiner annahme richtig, dass es so richtig ist:
PD3(INT1) und PD2(INT0)
ich hoffe mein problem ist jetzt verständlich.
mfg
Hi,
nochmal:
der Netzname im Schaltplan hat nichts mit der internen Pinbezeichnung des Controllers zu tun. Die XBUS Bezeichnungen wurden unabhängig von den Bezeichnungen vom AVR definiert, noch bevor das M32 Modul überhaupt entwickelt wurde.
Ausserdem - es sind nur Namen, man hätte die Signale auch Horst, Franz und Kalle nennen können :P
Auszug aus RP6Control.h:
#define BUZ (1 << PIND7) // Output
#define IO_PD6 (1 << PIND6) // I/O
#define IO_PD5 (1 << PIND5) // I/O
#define STR (1 << PIND4) // Output
#define EINT2 (1 << PIND3) // INT1 (Input - Pullup)
#define EINT1 (1 << PIND2) // INT0 (Input - Pullup)
#define TX (1 << PIND1) // USART TX (Output)
#define RX (1 << PIND0) // USART RX (Input)
Die Pins werden korrekt als EINT1 und 2 deklariert EINT = External INTerrupt
Daneben im Kommentar(!!) steht als Hilfe, dass das Controller intern eigentlich die Interrupts 0 und 1 sind.
Die Interrupt Event Handler müssen natürlich als INT0 und INT1 deklariert werden, weil die Bezeichnung beim MEGA32 nunmal so ist. Das kann bei anderen Controllern aber schon wieder ganz anders aussehen ;)
MfG,
SlyD
PS:
Die Schaltpläne sind auf der RP6 Homepage unter Dokumentation zu finden. Ich denke das geht schneller die dort runterzuladen als mit Rapidshare rumzuhantieren ;)
proevofreak
07.12.2009, 21:44
danke slyd; ich hoffe jetzt habe ich dich verstanden.
aber für was sind eigentlich die ganzen INTx_eventHandler?
kann ich die nicht einfach löschen und zum beispiel wenn die ISR (INT1_vect) selbst programmieren?
zur erklärung: ich will an den eingang PD3 einen IR- empfänger anschließen und damit den interrupt auslösen.
mfg
Natürlich kannst Du das auch selbst machen.
Kannste alles aus der Lib löschen und selbst schreiben das ist kein Problem.
Beim ACS und anderen Dingen wurden schon EventHandler eingeführt und da bot es sich an das einfach für alles herzunehmen.
MfG,
SlyD
proevofreak
07.12.2009, 22:00
gut danke, dann werd ich mich mal in den nächsten tagen daran machen es zu programmieren.
mfg
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.