Ehrlich, du solltest etwas deutlicher werden.
"funktioniert leider nicht so recht" ist als Voranalyse nicht wirklich umwerfend.
hallo ich habe ein kurzes Testprogramm geschrieben um den Hardware- Interrupt zu testen.
Immer wenn ein Interrupt ausgelöst wird soll meine Variable I um 1 incrementiert werden doch das funktioniert leider nciht so recht...
wo liegt mein Fehler ?
Code:Declare Sub Mycounter() $regfile = "m32def.dat" Dim I As Word $crystal = 16000000 'Quarzfrequenz $baud = 9600 Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down Tccr1b = Tccr1b Or &H02 'Prescaler = 8 On Int1 Mycounter Config Int1 = Rising 'rising for high level/ falling low level Enable Int1 Enable Interrupts I = 0 Do Print "this is a test for high-level interrupts I = " ; I 'main loop starts here Sound Portd.7 , 700 , 750 'BEEP Waitms 10 Loop End Sub Mycounter() 'Print "interrupt has occurent" I = I + 1 End Sub
Ehrlich, du solltest etwas deutlicher werden.
"funktioniert leider nicht so recht" ist als Voranalyse nicht wirklich umwerfend.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Hallo alecs,
wenn Du
- On Int1 Mycounter
schreibst, erwartet Bascom keine Sub sondern ein Label:
- Mycounter:
'Print "interrupt has occurent"
incr I
Return
- Reinhard -
Sorry PicNick, das nächste Mal mache ich eine bessere Fehlerbeschreibung.
Vielen vielen Dank Reinhard, das war das Problem.
Doch nun steh ich vor folgenden Problem, mein Variable I steiger ständig ihren Wert und das ganz unregelmäßig, obwohl nix am Port D angeschlossen ist. Die Variable startet bei 131 und steigert sich im nächsten Schritt auf 202 und im dritten Schritt ( print Ausgabe ) auf 432. Und dabei setzte ich doch die Variable am Programmstart auf 0.
seht ihr den Fehler ?
Danke
Code:Declare Sub Mycounter() $regfile = "m32def.dat" Dim I As Word $crystal = 16000000 'Quarzfrequenz $baud = 9600 Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down Tccr1b = Tccr1b Or &H02 'Prescaler = 8 On Int1 Mycounter Config Int1 = Rising 'interrupt für high level Enable Int1 Enable Interrupts I = 0 ' I auf Null setzen Do Print "this is a test for high-level interrupts I = " ; I 'main loop starts here Waitms 10 Loop End Mycounter: Incr I Return
Hallo alecs,
das könnte das Problem sein. Der Port ist auf keinenZitat von alecs
definierten Pegel und "schwingt" hin & her ... und der Interrupt
wird dadurch ausgelöst.
vermutet einfach mal: - Reinhard -
Hallo Reinhard,
ich habe nun die kontakte für Int1 und Int2 auf Masse und einmal direkt auf 5V geschlossen, doch in diesem Fall geschieht keine Print-Ausgabe mehr, ist das ein ständiger Interrupt ? Ich hab beide Kombinationen mit Rising und Falling ausgetestet doch immer wieder beim anschließen keine Print-Ausgabe.
Ist nix angeschloßen läuft die Printausgabe und die Variable ändert ihren Wert sehr schnell wie schon beschrieben und sie startet auch nicht bei 0, was auch sehr komisch ist!
Hallo alecs,
Dein Problem liegt definitiv daran, das Port D unbeschaltet
praktisch in der Luft hängt.
Wenn Du folgenden Code einfügst, sollte es funktionieren:
- Config Portd = Input
Portd = &HFF
Unbeschaltete Ports solltest Du in einen definierten Zustand
bringen. Die 2 Zeilen schalten den Port D auf Eingang und
aktivieren die internen Pullup's.
Das Dein Zähler so springt und nicht bei 0 anfängt, liegt an
Deinen 10ms Pause. In der Zwischenzeit sind schon wieder
ein paar Interrupts durch ...
- Reinhard -
Hallo Reinhardt,
ich versteh es einfach nicht.
haben den Interrupt auf Rising und es ist egal ob ich Masse oder 5 Volt anlege es wird immer ein Interrupt ausgelöst.
Auch die 2 Zeilen haben keine Änderung verschafft
Ich wollte es wirklich als Zähler nutzen aber solange es nicht theoretisch funktioniert brauch ich auch keinen Schmidttrigger oder ähnliches anschließen.
Ich weiß jetzt wirklich nicht mehr was da nicht stimmen sollte.
Im eigentlichen Sinne wird ja auch nur Int1 verwendet und somit ist es ja auch egal wie Int2 und die anderen am Port D belegt sind (sind alle frei) oder ? Kann der Int1 auch noch von einem andern Port ausgelöst werden ?
danke
Alex
@alecs:
Kannst du die Hexfile reinstellen, ich schau mal, ob die Sache compilermäßig koscher ist.
Mega32 hab ich gesehen
Welche Bascom version ? (Help-about)
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Hi,
ich habe die Version 1.11.7.7 ...
hier der HEX File :
Code::100000000C942A00189500000C94740018950000B8 :10001000189500001895000018950000189500002C :10002000189500001895000018950000189500001C :10003000189500001895000018950000189500000C :1000400018950000189500001895000018950000FC :10005000189500008FE58DBFC0E4E0E44E2E88E0E7 :100060008EBFD8E0F8E05F2EEEEFF7E0A0E6B0E05C :1000700088278D933197E9F787E689B980E080BDBD :1000800088E18AB966248D9A8C9A83EA8FBD80E0D4 :100090008EBDBB27AEE48C9182608C9380E081BBE7 :1000A0008FEF82BB85B7837F8C6085BF8BB78068FD :1000B0008BBF789480E090E0A0E6B0E08D939C93B5 :1000C000E0EBF2E00E94C700A8E2B8E0E0E6F0E072 :1000D0000E94FF000E94BF000E94CE0080E991E0D4 :1000E0000E94DE000C9460000F921F922F923F92AC :1000F0004F925F927F92AF92BF920F931F932F9375 :100100003F934F935F936F937F938F939F93AF939F :10011000BF93CF93DF93EF93FF938FB78F93EEED62 :10012000F2E00E94C7000E94CE00A0E6B0E00D9170 :100130001C9141E050E0040F151FA0E6B0E00D93C4 :100140001C938F918FBFFF91EF91DF91CF91BF9162 :10015000AF919F918F917F916F915F914F913F915F :100160002F911F910F91BF90AF907F905F904F9014 :100170003F902F901F900F901895F894FFCFA8E212 :10018000B8E08D91882311F00CD0FBCF08950E9428 :10019000ED00802D11F005D0FACF08958DE001D04B :1001A0008AE05D9BFECF8CB908953197F1F70895F1 :1001B000689462F80895E89462F80895EF93FF93C5 :1001C000EE27E82BE92B31F0E0EAFFE03197F1F779 :1001D0000197D1F7FF91EF910895C89531960020CE :1001E0000895000F111F221F331F089500951095C9 :1001F000209530950F5F1F4F2F4F3F4F089501916E :1002000010810EC001911191219130810BC001919B :10021000108117FF05C03FEF2FEF04C000811127A9 :100220002227332737FF03C0E1DF8DE28D93CF9381 :10023000DF93CF92DF92EF92AA24BB24CC24DD245B :10024000EE2440E2CAE0DD2755E093E38881890F80 :1002500087FD9F7083FD907F891B89935A95A9F72D :10026000C0DFAA1CBB1CCC1CDD1CEE1C4A9551F740 :10027000E894EFE0FF2782910ED0EB30E0F71EF01C :1002800068948A2D0CD088278D93EF90DF90CF90C3 :10029000DF91CF910895982F829501D0892F8F708B :1002A000805D26F0803309F4089568948D93089555 :1002B00074686973206973206120746573742066A3 :1002C0006F7220686967682D6C6576656C20696E51 :1002D00074657272757074732049203D2000696ED8 :1002E0007465727275707420686173206F636375D2 :0602F00072656E7400004F :00000001FF
Lesezeichen