Ich will einen einfachen Versuch mit "Pin Change Interrupt" machen.
Als Beispiel sollte der PCINT0 bis PCINT5 dienen.
Nur scheitert es schon an folgenden Zeilen:
Thomas E. schrieb:> ...und erzähl uns, ob du den alten 2313 oder den aktuellen 2313a> hast.> Das macht in diesem Fall nämlich ausnahmsweise einen Unterschied.
Auf dem Gehäuse steht: ATtiny2313A-PU
Mathias schrieb:> Auf dem Gehäuse steht: ATtiny2313A-PU
Und 2313a hast du auch eingestellt?
Der 2313 hat den Pinchange nur auf Port B. Der 2313a auf allen Pins.
Entsprechend hat der 2313a auch mehr Interrupt-Vektoren und andere
Bezeichnungen für diese sowie auch für die Bezeichner der
Freigabe-Flags. Klär das mal ab, damit du weißt, ob der gemeinsame
Nenner vorhanden ist. Denn du schriebst 2313, hast aber den 2313a.
Manchmal ist diese Pedanterie vonnöten. In diesem Fall sogar besonders.
Und du guckst natürlich auch ins Datenblatt vom 2313a/4313?
Schreibt man 2313-Code für den 2313a ab, ich meine natürlich, daß man
bewährten Code verwendet, schiesst man sich an dieser Stelle ins Knie.
Dann probier mal den 2313a als 2313 zu programmieren. Das könnte
klappen. Den Knieschuss holt man sich eher andersrum.
Also die relevanten Bezeichner, PCINT0 nach PCINT, PCIE0 nach PCIE usw.
ändern. Dann schluckt das wenigstens der Compiler.
Aber mit was für einem Sch...-Programm werkelst du da? Allein die
Auswahl 2313/4313 ist so was von für'n A....
2313A und 4313 sind Brüder, der 2313 ist der greise Onkel der beiden.
Was für ein Hirni hat das verzapft?
>Aber mit was für einem Sch...-Programm werkelst du da? Allein die>Auswahl 2313/4313 ist so was von für'n A....
Es ist das beste, was ich für den Arduino kenne, die Orignal-IDE des
Arduinos bietet Null Komfort.
Die Board-Auswahl ist nur die Familie. Weiter unten bei Chip kann man
ATtiny2313 oder 4313 wählen. Aber leider kein A-Typ.
Das fehlen des A ist der json-Datei zurück zu führen.
https://github.com/arduino/Arduino/wiki/Unofficial-list-of-3rd-party-boards-support-urls>Also die relevanten Bezeichner, PCINT0 nach PCINT, PCIE0 nach PCIE usw.>ändern. Dann schluckt das wenigstens der Compiler.
Dies werde ich bei Gelegenheit probieren.
Thomas E. schrieb:> Schreibt man 2313-Code für den 2313a ab, ich meine natürlich, daß man> bewährten Code verwendet, schiesst man sich an dieser Stelle ins Knie.
Nö.
Der 2313A ist abwärtskompatibel. Schreibt man nichts in die zusätzlichen
Register, passiert auch nichts.
Was natürlich bescheuert ist, daß beide die gleiche Signatur haben. Wenn
also die 2313A Erweiterungen benötigt werden, kann man eine
Fehlbestückung beim Programmieren nicht erkennen.
Das ist zwar mehr Schreibarbeit als den Binärcode direkt hinzuschreiben,
kann aber später von Vorteil sein. Schaut man nämlich in 1-2 Jahren
wieder ins Projekt rein muss man bei PORTC |= 0b00001000 erstmal die
Nullen abzählen und fragt sich vielleicht auch, was man damit bezwecken
wollte wobei aus einem PORTC |= (1 << PC3) sofort ersichtlich ist, dass
man hier den Pin PC3 setzen wollte.
Auch bei der Fehlersuche kann das Hilfreich sein, während man sich beim
Binärcode durchaus dumm und dusselig suchen kann, warum denn nun die LED
nicht an geht, die an PA5 angeschlossen ist, sieht man bei der
Shift-Schreibweise sofort, dass man aus versehen PA4 geschrieben hat.
Danke für den Tip, ich habe aus dem = noch ein |= gemacht.
Da habe ich doch noch eine Frage, ist dies richtig, das man mit PCIE die
Interrupt aktiviert und mit PCMSK sagt man welche Ports(Pin) auf den
Interrupt reagieren sollen ?
Ein |= macht man, wenn man die anderen Bits des Registers nicht löschen
will.
Und ja, das ist richtig, mit PCIE aktiviert man den Pin Change Interrupt
und mit PCMSK wird angegeben, auf welche Pins der PCIE sensitiv ist.
Hallo Zusammen,
ich versuche gerade auf nem Tiny4313 eine Pinchange Funktion zu
implementieren. Aber die Registernamen aus dem Datenblatt und die von
Winavr (aus iotn4313.h) passen nicht zusammen. Es gibt kein PCMSK0..2
sondern nur PCMSK. Es gibt kein GIFR sondern nur EIFR. Soll ich die
defines händisch in den Header eintragen, oder was stimmt hier nicht?
Ich kann in der AVR libc Hilfe auch die entsprechenden
Interrupt-Vektoren finden.
Was ist hier los?
Vielen Dank und viele Grüße