Forum: Mikrocontroller und Digitale Elektronik Interrupt INT0 Software funktioniert aber auf dem Kontroller nicht


von Heiko M. (Firma: Privat) (kea_)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,
ich habe Erfahrung mit C++ Programmierung aber bin absoluter Anfänger in 
Sachen Mikrocontroller ich versuche ein einfaches Übungsbeispiel mit 
einem Taster aufzubauen.
Im Bascom Editor wird das Programm auch richtig abgearbeitet. Aber wenn 
ich das Programm auf dem Controller abarbeiten lasse dann macht der was 
er will. Der PORT B1 wird auch gesetzt wenn ich den Taster (PIN D2) 
nicht betätige. Was mache ich falsch? Kann es sein das die Spannung der 
Akkus zu sehr schwankt?

Siehe auf Aufbau der Hardware auf dem Bild.
Vielen dank für eure Hilfe.
1
$regfile = "M8def.dat"
2
$crystal = 1000000
3
$hwstack = 100
4
$swstack = 100
5
$framesize = 100
6
7
8
Config Portb.0 = Output
9
Config Portb.1 = Output
10
Config Pind.2 = Input
11
Config Int0 = Rising
12
13
On Int0 On_int0
14
15
16
Enable Int0
17
Enable Interrupts
18
19
Dim I As Integer
20
I = 0
21
22
Do
23
   nop
24
25
   Portb.0 = 1
26
27
   If I = 0 Then
28
      Portb.1 = 0
29
   Else
30
      Portb.1 = 1
31
   End If
32
33
   Print Portb
34
35
   Waitms 2
36
Loop
37
38
End
39
40
41
On_int0:
42
   If I = 0 Then
43
      I = 1
44
   Else
45
      I = 0
46
   End If
47
Return

von Neuling (Gast)


Lesenswert?

Hast du mal einen Schaltplan ? .... Weil ich sehe dort keinen Widerstand 
welcher den Pegel hält.

von spess53 (Gast)


Lesenswert?

Hi

Du hast nicht alle Versorgungsspannungspins angeschlossen. 
Abblockkondensatoren fehlen. LEDs ohne Vorwiderstände. Kein 
Pull-Up-Widerstand am Taster....

MfG Spess

von Michael (Gast)


Lesenswert?

spess53 schrieb:
> Abblockkondensatoren fehlen. LEDs ohne Vorwiderstände. Kein
> Pull-Up-Widerstand am Taster....

Puul-Up am Taster brauchts auch nicht, ist intern im Atmega. Was aber 
sofort auffällt ist, dass Pin 1 des Atmegas, also der Reset-Pin, nicht 
über einen Kondensator an GND bzw. Widerstand an Vcc angeschlossen ist. 
Der Atmega wird sich so wohl kaum entscheiden können ob er nun im Reset 
sein soll oder nicht.
Abblockkondensatoren im Batteriebetrieb sind zwar nicht unbedingt 
erforderlich aber sie stören auch nicht und würden eine mögliche 
Störeinkopplung auf die Versorgungsspannung den Gar ausmachen.

von spess53 (Gast)


Lesenswert?

Hi

>Puul-Up am Taster brauchts auch nicht, ist intern im Atmega.

Sollte der nicht aber auch eingeschaltet werden?

BASCOM-Hilfe:

When you need the pull up to be activated, you have to write to the PORT 
register.

MfG Spess

von Detlev T. (detlevt)


Lesenswert?

Michael schrieb:
> Puul-Up am Taster brauchts auch nicht, ist intern im Atmega.

..aber auch nur, wenn man ihn aktiviert. Das dürfte hier das Problem 
sein, also einmal PORTd.2 = 1 versuchen

von Heiko M. (Firma: Privat) (kea_)


Lesenswert?

Hallo zusammen, vielen dank für eure rasche Antwort.
Einen Schaltplan hab ich keinen. Wie gesagt komme vom C++.
Hab von Elektrotechnik keine Ahnung aber ich möchte mich doch ein wenig 
in das interessante Thema einarbeiten.
Ich hab mir ein Buch gekauft in dem die Mikrocontroller-Programmierung 
erkärt wird und da sind auch einige Übungsbeispiele vorhanden aber eben 
leider keine Interrupts mit der Erklärung für die Hardware.
Aber ich denke ihr habt mir schon ein wenig geholfen damit ich weiss wo 
und wie ich weitersuchen soll.

Vielen dank für eure Hilfe.
Gruss Heiko

von spess53 (Gast)


Lesenswert?

Hi

>Was aber sofort auffällt ist, dass Pin 1 des Atmegas, also der Reset-Pin,
>nicht über einen Kondensator an GND bzw. Widerstand an Vcc angeschlossen
>ist.

Der ist schon eingebaut (Datenblatt):

Symbol Parameter               Condition       Min Typ Max Units
RRST   Reset Pull-up Resistor                  30      80   kΩ

MfG Spess

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Heiko Meier schrieb:
> Einen Schaltplan hab ich keinen. Wie gesagt komme vom C++.
Das eine impliziert das andere nicht!

Heiko Meier schrieb:
> aber eben leider keine Interrupts mit der Erklärung für die Hardware.
Hast du das schon gesehen:
http://www.mikrocontroller.net/articles/Hauptseite
http://www.mikrocontroller.net/articles/AVR-Tutorial
http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen

von Cpluscplus (Gast)


Lesenswert?

Du hast Ahnung von C++ und fängst dann an bei der Mikrocontroller 
Programmierung auf Bascom zu setzen... das versteh wer will.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

spess53 schrieb:
> RRST   Reset Pull-up Resistor                  30      80   kΩ
Übrigens ist dieser interne Widerstand genauso wie die Pullups an den 
Port-Pins nur auf dem Labortisch brauchbar. Sobald man sich darauf 
verlässt und EMV Burst-Tests mit 2kV (Industrie) in der Koppelzange 
macht, hagelt es immer wieder mal Resets oder falsche Eingangspegel (= 
betätigte Tasten). Bei den Tasten kann man mit einer Softwareentprellung 
noch was machen, aber beim Reset...  :-o

Da ist mir für industrielle Geräte ein externer Pullup mit 3k3 (und oft 
auch ein Kondensator mit 10nF) für einen Eingang nicht zu teuer.

von Michael (Gast)


Lesenswert?

spess53 schrieb:
> Hi
>
>>Was aber sofort auffällt ist, dass Pin 1 des Atmegas, also der Reset-Pin,
>>nicht über einen Kondensator an GND bzw. Widerstand an Vcc angeschlossen
>>ist.
>
> Der ist schon eingebaut (Datenblatt):
>
> Symbol Parameter               Condition       Min Typ Max Units
> RRST   Reset Pull-up Resistor                  30      80   kΩ
>
> MfG Spess

Gleiche Frage wie beim Taster: Auch eingeschaltet? Ich hab bisher nur 
mit dem 88PA gearbeitet und da gibts ohne externe Beschaltung des 
Resetpins immer wieder Probleme.

spess53 schrieb:
> Hi
>
>>Puul-Up am Taster brauchts auch nicht, ist intern im Atmega.
>
> Sollte der nicht aber auch eingeschaltet werden?
>
> BASCOM-Hilfe:
>
> When you need the pull up to be activated, you have to write to the PORT
> register.
>
> MfG Spess

OK, mit Bascom kenn ich mich nicht aus. Klar muss der eingeschaltet 
werden ;)
Ich schreib in C und schalte die immer automatisch ein, hab ich mir 
angewöhnt.

Grüße

von spess53 (Gast)


Lesenswert?

Hi

>Übrigens ist dieser interne Widerstand genauso wie die Pullups an den
>Port-Pins nur auf dem Labortisch brauchbar.

Ist mit durchaus bekannt. Ich benutze generell externe Pull-Ups. Mir 
ging es eigentlich nur um die Aussage:

>Puul-Up am Taster brauchts auch nicht, ist intern im Atmega. Was aber
>sofort auffällt ist, dass Pin 1 des Atmegas, also der Reset-Pin, nicht
>über einen Kondensator an GND bzw. Widerstand an Vcc angeschlossen ist.

Das stimmt, so, einfach nicht.

Außerdem würde ich Anfängern sowieso externe Pull-Ups empfehlen. Die 
sind wenigstens nicht durch Softwarefehler abschaltbar.

MfG Spess

von Karl H. (kbuchegg)


Lesenswert?

Wenn wir schon beim Empfehlen sind, sollte man eine nicht ganz 
unwichtige Empfehlung auch aussprechen:
Taster werden nicht über Interrupts ausgewertet. Das gibt nur Ärger mit 
der Entprellung.
Gerade in BASCOM gibt es ja ein brauchbares Debounce, mit dem man das 
wunderbar in den Griff kriegen kann.

von Heiko M. (Firma: Privat) (kea_)


Lesenswert?

Oha, wollte hier keinen grösseren Threat starten.

Was mir aber gefällt ist das dieses Forum lebt.

Also nun zu meinen Antworten.
Wie gesagt habe ich eine vorliebe zu PC -Anwendungsprogrammierung (4gl).
Ich habe mich schon mit div. Sprachen befasst. PHP, C++ (wxWidget, Qt4), 
ASP, VBScript, VB, JavaScript, Java, sogar ein wenig mit Delphi.
Und irgendwie ist mir die Irrwitzige Idee gekommen einfach mal was mit 
einem Mikrocontroller zu machen. Interessant ist für mich die 
Kommunikation von PC zu Controller. Und vielleicht auch mal einen 
Sprinkler im Garten zu steuern. Aber das ist noch weit weg. Also um 
Ehrlich zu sein war ich im Fach Elektrotechnik eine absolute Niete hätte 
mir fasst den Kopf gekostet dieses Fach. Aber irgendwie finde ich die 
Elektrotechnik doch faszinierend. (Nach euren Fragen und Antworten habe 
ich mir jetzt noch ein Buch über Elektrotechnik bestellt.)

In Bascom habe ich das gemacht weil ich mit c nicht weitergekommen bin. 
Das heisst ich habe kein Beispiel gefunden das ich mit dem AVR Studio 
zum laufen gekriegt habe der Interrupt wurde einfach nicht aufgerufen. 
Aber in Bascom hab ich in ca. 30 Min. was zusammen bekommen. Ist halt 
schon besser dokumentiert.

Den DEBOUCE befehl werde ich mir noch genauer ansehen. Danke für die 
Empfehlung.

Grüsse und danke für eure Hilfe
Heiko

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Heiko Meier schrieb:
> In Bascom habe ich das gemacht weil ich mit c nicht weitergekommen bin.
Mein Eindruck: du solltest nicht so viele (Programmier-)Sprachen 
sprechen. Statt dessen eine davon richtig...

> Das heisst ich habe kein Beispiel gefunden das ich mit dem AVR Studio
> zum laufen gekriegt habe der Interrupt wurde einfach nicht aufgerufen.
Warum fängst du gleich mit Interrupts an?
Insbesondere, wenn du noch nicht mal weißt, das du da eigentlich tust!
Mir hat am Anfang das Polling erst mal ausgereicht...

> Interessant ist für mich die Kommunikation von PC zu Controller.
> Und vielleicht auch mal einen Sprinkler im Garten zu steuern.
Ich sehe für diese kleine Aufgabe noch keine Notwendigkeit für einen 
Interrupt.

> Aber in Bascom hab ich in ca. 30 Min. was zusammen bekommen.
> Ist halt schon besser dokumentiert.
Wie? Was?
In Bascom ist das alles eben hübsch verpackt. Wenns aber Probleme gibt 
mußt du trotzdem wissen, was du da eigentlich gerade machst. Und in C 
kann ich dir das bis aufs letzte Bit genau sagen, weil (und wenn) der 
Sourcecode für die jeweilige Funktion vorliegt.

> Aber in Bascom hab ich in ca. 30 Min. was zusammen bekommen.
Nur tut es eben nicht, wie im
Beitrag "Interrupt INT0 Software funktioniert aber auf dem Kontroller nicht" zu lesen ist...  :-/

von Heiko M. (Firma: Privat) (kea_)


Lesenswert?

Ok, hab's gesehen wie in jedem anderen Forum.
Es gibt immer einer der was runtermachen möchte anstatt zu helfen.

Das ich so viele sprachen nicht mehr als junior programmieren kann hat 
auch mit meinem beruflichen werde gang zu tun. Wenn man mal als 
Web-Programmierer (asp) gearbeitet hat und in der Schule mal was von 
Vererbung gehört hat (C++) dann ist das Gott sei dank auch in PHP und 
Delphi so gelöst worden.
Ich würde sagen wenn jemand Java Programmieren kann dann ist die 
Einarbeitung in C++ ein klacks er muss sich halt noch mit den Pointern 
rumschlagen was auch nichts besonderes ist.
Übrigens hast du gewusst das Java, Qt4, wxWidgets und C# alle mit 
Layouts arbeiten. Das Grundgerüst ist das Selbe. Nur die Namen für den 
Aufruf sind anders.

Interrupts war nicht mein 1. Programm wie kommst du darauf?

Und die Aufgabe ist ein Lernbeispiel. Jeder fängt ja mal klein an. Ob 
sinnvoll oder nicht. Der Sinn besteht im lernen.

Bascom ist in der Tat besser Documentiert wie c. Und auch die 
Entwicklungsumgebung gefällt mir besser aber AVR Studio 5 steht ja in 
den Startlöchern. Aber ich möchte hier c nicht runtermachen. Ich liebe c 
und benutze wenn es sein muss auch andere Sprachen denn die meisten 
Sprachen haben ihre da seins Berechtigung.

Wie gesagt ich bin ein Anfänger war ja jeder mal, …oder…

Du musst mir nicht mehr antworten. Ich habe bekommen was ich wollte und 
werde auf diesen Thread nicht mehr antworten.

Danke an alle die mir geholfen haben.
Gruss Heiko

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Heiko Meier schrieb:
> Interrupts war nicht mein 1. Programm wie kommst du darauf?
Musste ich leider annehmen, weil ich dich nicht weiter kenne, und du 
nichts zu deinem bisherigen Wissensstand mitgeteilt hast ausser:
ich kenne mich nicht aus!

> Bascom ist in der Tat besser Documentiert wie c.
Du kannst nicht BASCOM und C vergleichen.
Bascom ist ein Fertiggericht.
C ist eher sowas wie "Selber kochen".
Und jetzt sag mir mal, was auf Dauer besser schmeckt. Natürlich darfst 
du auf deine Fertigpizza noch selber Extra-Käse drauflegen...

> Entwicklungsumgebung gefällt mir besser aber AVR Studio 5 steht ja in
> den Startlöchern. Aber ich möchte hier c nicht runtermachen. Ich liebe c
> und benutze wenn es sein muss auch andere Sprachen denn die meisten
> Sprachen haben ihre da seins Berechtigung.
Und ihre Tücken und Eigenheiten.

> Ich würde sagen wenn jemand Java Programmieren kann dann ist die
> Einarbeitung in C++ ein klacks er muss sich halt noch mit den Pointern
> rumschlagen was auch nichts besonderes ist.
Zigtausende Bugfixes sprechen da eine andere Sprache...  :-o

> Es gibt immer einer der was runtermachen möchte anstatt zu helfen.
> Du musst mir nicht mehr antworten.
Ich wollte dich nicht runtermachen. Das geht anders.
Ich wollte dich mit meinen Fragen nur zum DENKEN anregen.

von JohnDoe (Gast)


Lesenswert?

Heiko Meier schrieb:
> Oha, wollte hier keinen grösseren Threat starten.

Bis jetzt fühlen wir uns auch noch nicht bedroht :)

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
Noch kein Account? Hier anmelden.