PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Interrupt probleme



Zardest
22.03.2012, 22:06
Hallo

Ich habe ein Problem mit den Interrupts
ich möchte gern meine Modellbauservos ansteuern dafür brauche ich allerdings Interrupts (interrups enabel)
da ich dabei auch einen Poti mittels adc auslesen möchte müssen die Interrupts ja aus sein

Da ist jetzt das Problem wie schaffe ich es für den einen Befehl die Interrupts einzuschalten und für den anderen nicht :confused:

Ich habe auch noch ein 2 Problem
wie ihr in dem folgendem Programm sehen könnt verwende ich ein 16*2 lcd und möchte auf diesem meine werte anzeigen aber dieser zeigt 0 oder 1023 an und nicht die Zwischenwerte von meinem Poti


$crystal = 1000000
$regfile = "m16def.dat"

Config Porta.0 = Input
Config Portd.7 = output

Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , _
Db7 = Portd.5 , E = Portd.1 , Rs = Portd.0

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Enable Interrupts
Config Servos = 1 , Servo1 = Portd.7 , Reload = 10


Config Lcd = 16 * 2
Cursor Off

Dim Volt As Integer
Dim Winkel As Integer




Start Adc

Do
Volt = Getadc(0)

Winkel = Volt / 37
Winkel = Winkel + 10

servo(1)=winkel


Locate 1 , 1
Lcd Volt

Locate 2 , 1
Lcd Winkel


Loop

End

Kampi
22.03.2012, 22:22
Hi,

"Enable Interrupts" sorgt dafür das Interrupts Global aktiviert werden. Es ist quasi der Hauptschalter für die Interrupts.
Du kannst einzelne Interrupts aktivieren z.B. für den ADC oder UART aber ohne das globale aktivieren der Interrupts funktioniert das nicht.
Wenn du also einen Interrupt nicht haben willst (z.B. vom ADC) deaktivierst du diesen einfach. Die anderen aktivierten Interrups funktionieren dann problemlos weiter.
Aber in deinem Programm verwendest du ja nicht den ADC Interrupt, deswegen sollte er nicht stören.
Den Schleifer vom Poti hast du aber auch an dem ADC0 Pin?

Zardest
22.03.2012, 22:30
Ja ich hab den Mittelabgriff an den PortA.0 er funktioniert auch ich hatte es mal am Laufen aber jetzt zeigt er nur noch 1023 oder 0 an

Ja das Problem ist wenn ich die Interrupts einschalte funktioniert der Servo aber der adc nicht und wenn die Interrupts aus sind funktioniert der adc aber der Servo nich

Besserwessi
22.03.2012, 22:57
An sich sollte der ADC auch mit den Interrupts gehen.
Der Befehl start ADC könnte ein Problem sein und nicht das tun was man erwartet. Damit wird der Interrupt des ADC freigegeben, nicht der ADC gestartet.

Searcher
23.03.2012, 09:55
Ich kann erstmal keinen Fehler im Programm feststellen:confused:

Bringen folgende zusätzliche Zeilen im Header etwas?


$hwstack= 34
$swstack= 10
$framesize= 40

Gruß
Searcher

Zardest
23.03.2012, 11:54
Danke werde ich sofort einmal ausprobieren.

for_ro
23.03.2012, 19:30
Damit wird der Interrupt des ADC freigegeben, nicht der ADC gestartet.
Hallo Besserwessi,
wo hast du denn das gelesen?
Start ADC schaltet den ADC ein (setzt ADCSR.ADEN), was übrigens in neueren Bascom Versionen auch schon durch den Config ADC geschieht. Ist also hier überflüssig und wird nur benötigt, falls man den ADC zwischenzeitlich mal mit Stop ADC ausgeschaltet hat.
Enable ADC würde den Interrupt aktivieren.

Zardest
14.04.2012, 21:01
Hallo
nach einer großen Pause widme ich mich wieder meinem Projekt mit dem adc kann es sein das mein Code richtig ist und der Poti funktioniert aber dass ich an meinem atmega den Pin avcc mit 5v versorgen muss weil ich ja gesagt habe, dass er es mit diesem Pin vergleichen soll ? Müsste es dann nicht funktionieren? Weil es funktioniert ja eigentlich nur er zeigt mir 0 oder 1023 an, weil er es ja nicht vergleichen kann, ich werde es morgen auf jeden Fall testen. Wie muss ich eigentlich die anderen adc Ports konfigurieren muss also was ich verändern muss das ich Porta.1 als adc nutzen kann?

Besserwessi
14.04.2012, 23:29
Den Pin AVCC muss man in jedem Fall versorgen. Es sind nur Ausnahmefälle, außerhalb der Spezification das der µC noch läuft ohne.

Wie man die anderen Pins von Port A konfiguriert ist relativ egal - den als ADC Eingang benutzten sollte man als Eingang, ohne Pullup einstellen. Je nach µC sollte man auch noch den Digitalen Eingang für den Pin ausschalten - das ist aber kein muss, sondern nur eine Empfehlung für weniger Störungen und weniger Stromverbrauch.

Zardest
15.04.2012, 11:07
Sorry aber ich meinte nicht den Haupt avcc gibt ja 2 avcc am atmega16 und ich habe immer nur an einen 5v gegeben aber auch wenn ich an beide 5v gebe funktioniert es nicht könntet ihr mir mal ein kleines Programm schreiben aber mit lcd 16*2 das Ich auch sehen kann welche werte ich messe

Searcher
15.04.2012, 16:34
... könntet ihr mir mal ein kleines Programm schreiben aber mit lcd 16*2 das Ich auch sehen kann welche werte ich messe

Warum? Du hast doch plausibele Werte (0..1023) mit Deinem ersten Programm angezeigt bekommen. Ich finde es zielführender, wenn Du eine Plan über Deine gegenwärtige Verschaltung inclusive Servo zeigst.

Gruß
Searcher