mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MISO und SCk Pin als PCINT nutzen


Autor: Lars H. (haggen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin!
Kurze Frage:
ich möchte unter Bascom beim Atmega 328P die Pins B2 bis B5 als pin 
change interrupt konfigurieren. Ich habe die 4 Pins über die internen 
Pullups auf high gelegt und möchte nun mit einem GND-Impuls den 
interrupt auslösen
B2 und B3 laufen als PCINT einwandfrei.
B4 und B5 nicht. Die Pins sind als Eingänge konfiguriert und (außer mit 
dem ISP-Stecker) mit nichts verbunden. ISP Stecker ist abgezogen.
Die JTAG funktion muss man z.B. erst deaktivieren, um die betroffenen 
Pins als I/O nutzen zu können. Ist das hier ähnlich? B4 ist beim 328er 
"MISO" und B5 "SCK"...
Mein Bascom Code ist dies:

Enable Pcint0
On Pcint0 Isr            ' das PCINT Register ist bei B2-B5  null
Pcmsk0 = &B00111100      ' Pins B2-B5 als PCINT konfiguriert
Ddrb = &B11000011        ' Pins B2-B5 als Eingänge konfiguriert


Portb.2 = 1              'Pullups
Portb.3 = 1
Portb.4 = 1
Portb.5 = 1

isr:                     'ISR
led_test= 1
waitms 100
led_test= 0
return

Möchte zu gern wissen, woran es liegt. Vielen Dank für Eure Hilfe!
Gruß
Lars

Autor: Kirsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lars H. schrieb:
> Die JTAG funktion muss man z.B. erst deaktivieren, um die betroffenen
> Pins als I/O nutzen zu können. Ist das hier ähnlich?

Nein.

PCINT sollte problemlos gehen.

Hast du ein Stromlaufplan? Foto vom Aufbau?

Autor: Hermann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kirsch schrieb:
> Lars H. schrieb:
>> Die JTAG funktion muss man z.B. erst deaktivieren, um die betroffenen
>> Pins als I/O nutzen zu können. Ist das hier ähnlich?
>
> Nein.
>
> PCINT sollte problemlos gehen.
>
> Hast du ein Stromlaufplan? Foto vom Aufbau?


... und das vollständige Programm!?

Autor: Lars H. (haggen)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ist ein Fertigmodul.
Aber das reicht mir eigentlich schon als Antwort.
Wenn ich mit meiner Vermutung recht gehabt hätte, hätten hier schon 
leute
geschrieben:" Ja, klar! Du musst natürlich den ISR deaktivieren, sonst 
gehen B4/B5 als PCINT nicht."
Das ist nicht der Fall, also muss ich auf Fehlersuche gehen...

Autor: Lars H. (haggen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aha! langsam klärt sich das:
Auf dem Modul ist eine SMD LED mit portb.5 verbunden.
Wahrscheinlich als eine Art Status-LED für Programmdaten-Empfang.
Dann wird B4 auch für irgendetwas auf dem Modul reserviert sein.

Autor: Eric B. (beric)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lars H. schrieb:
> Mein Bascom Code ist dies:
>
> Enable Pcint0
> On Pcint0 Isr            ' das PCINT Register ist bei B2-B5  null
> Pcmsk0 = &B00111100      ' Pins B2-B5 als PCINT konfiguriert
> Ddrb = &B11000011        ' Pins B2-B5 als Eingänge konfiguriert
>
> Portb.2 = 1              'Pullups
> Portb.3 = 1
> Portb.4 = 1
> Portb.5 = 1
>                  <<--- HIER

Und was soll das Programm tun wenn es an dieser Stelle (HIER) angekommen 
ist? Hint: "Nichts" ist nicht die richtige Antwort, denn das kann ein 
Programm eben nicht!

Autor: Lars H. (haggen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hatte ich ja ob geschrieben:

isr:                     'ISR
led_test= 1
waitms 100
led_test= 0
return

Zum Test, ob die vier PCINT alle funktionieren, soll erstmal nur
eine Kontroll- LED für 100ms aufleuchten.
Das tut sie auch bei B2/B3 ordnungsgemäß

Autor: Lars H. (haggen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das Programm ist knapp 30KB groß. Das kann ich niemanden zumuten, alles 
durchzuflöhen...
Ach ja.. ich hatte weiter oben in meinem Code Schnippsel "enable 
interrupts" vergessen. Ist aber im Hauptprogramm vorhanden.

Autor: Eric B. (beric)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lars H. schrieb:
> hatte ich ja ob geschrieben:
>
> isr:                     'ISR
> led_test= 1
> waitms 100
> led_test= 0
> return

Das Programm soll einfach in die ISR reinlaufen, obwohl kein Interrupt 
vorliegt? Und wohin "return"t das Programm dann zum Schluss?


Lars H. schrieb:
> das Programm ist knapp 30KB groß.

Aha! Das oben gepostete Programm ist also nicht der gesamte Code. Dann 
liegt der Fehler irgendwo in den 29kB die du eben nicht zeigst...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.