Can128 Posted March 19, 2008 Report Share Posted March 19, 2008 Hallo zusammen ich schon wieder :-[Also kurz gesagt ich habe CB_ SDCC_ Skeleton zum laufen gebracht auf dem LCD erscheint "Hallo wo warst du so lange?" und ich sagte "ich hatte AIN DOUT Probleme du Hammel"dann auf dem LCD "Dann fang endlich an schatz" ;Dich habe mit Googel Übersetzer die mios Funktionen übersetz die in Skeleton main.csind.was ich hier nicht verstehe ist.Ein beispiel://///////////////////////////////////////////////////////////////////////////// This function is called by MIOS when an button has been toggled// pin_value is 1 when button released, and 0 when button pressed // Diese Funktion wird aufgerufen, wenn ein von MIOS-Taste wurde toggled// Pin_value ist 1, wenn Taste freigegeben, und 0, wenn Taste gedrückt/////////////////////////////////////////////////////////////////////////////void DIN_NotifyToggle(unsigned char pin, unsigned char pin_value) __wparam{}Wie wird diese Funktion angewendet.Diese Funktion erwartet 2 Parameter (unsigned char pin, unsigned char pin_value)__wparam= (Warum dies auserhalb der klammer ist versteh ich nicht)Die variablen einer Funktion sind normalerweise mit klammern abgekapselt.wo bekomme ich die variablen (unsigned char pin, unsigned char pin_value) heroder werden diese variablen automatisch zugewiesen?ich steh etwas im dunklen und mein schatz wartet auf mich.Bin für jede Hilfe Dankbar!!! Quote Link to comment Share on other sites More sharing options...
nILS Posted March 19, 2008 Report Share Posted March 19, 2008 Diese Funktion wird von MIOS aufgerufen sobald eine Taste gedrück/losgelassen wurde.pin hält die Nummer des Buttons und pin_value den Status (0 = knopf gedrückt, 1 = knopf losgelassen). __wparam ist der Wert der in diesem Moment im WREG (= working register = Arbeitsregister) liegt. Um den mußt Du Dich nicht kümmern.Die Funktion wird üblicherweise nicht von Dir selber sondern von MIOS aufgerufen. Du würdest also nur einen Handler schreiben, der anhand der Parameter entscheidet, was zu tun ist. Quote Link to comment Share on other sites More sharing options...
Can128 Posted March 19, 2008 Author Report Share Posted March 19, 2008 Dem nach müsste dies funktionierenvoid DIN_NotifyToggle(unsigned char pin, unsigned char pin_value) __wparam{ if(pin||pin_value) { MIOS_LCD_Clear(); MIOS_LCD_CursorSet(0x00); MIOS_LCD_PrintCString("Hello Niels!"); }}Es funktioniert auch danke..! so versteh ich wie es funktioniert.das wahr der erste schritt freue mich :-* Quote Link to comment Share on other sites More sharing options...
nILS Posted March 19, 2008 Report Share Posted March 19, 2008 if(pin||pin_value) Was genau soll das denn tun? Ist ein bissel wenig sinnvoll so auf den ersten Blick, da es eigentlich immer true ergibt außer wenn pin == 0 (nur der erste button) und pin_value == 0 (button gedrückt). Sinniger wäre bspw: if (pin_value != 1) // button gedrückt{ MIOS_LCD_CursorSet(0x00); MIOS_LCD_PrintCString("Pin: "); MIOS_LCD_PrintBCD3(pin);}[/code] Quote Link to comment Share on other sites More sharing options...
Can128 Posted March 20, 2008 Author Report Share Posted March 20, 2008 Hallo Nilsif(pin||pin_value) Habe ich nur zum schnellen testen Reingeschrieben.Mir geht’s darum erst mal die wichtigsten MiosC Funktionen kennen zu lernen.und wie sie angewendet werden.Erst danach fange ich an die Applikation zuschreiben. Dein sinn volle code hat mir schon weitergeholfen denn ich habe nach eine möglischkeit gesucht um unsigned char in string umzuwandeln damit ich ein zahl am LCD anzeigen kann.Aber ich sehe es gibt eine Funktion die dies erledigt MIOS_LCD_PrintBCD3(pin);.als nächstes würde ich gerne ein led einschalten.wenn eine MidiMsg empfangen wird. in Skeleton main.c sehe ich keine Funktion für Dout mal sehen ob ich mit Dout was machen kann.Die Nacht ist noch lang :D Quote Link to comment Share on other sites More sharing options...
Can128 Posted March 20, 2008 Author Report Share Posted March 20, 2008 :D Kann jetz paar Led ein ausschalten dank Torstens beispiel es klappt.Nur mit AIN hab ich probleme.void AIN_NotifyChange(unsigned char pin, unsigned int pin_value) __wparam{ if(pin||pin_value) { MIOS_LCD_Clear(); MIOS_LCD_CursorSet(0x00); MIOS_LCD_PrintCString("AIN Reagiert"); MIOS_MIDI_TxBufferPut(0x90); // Note Event at channel #1 MIOS_MIDI_TxBufferPut(pin); // just forward the pin number (0..127) MIOS_MIDI_TxBufferPut(pin_value ); } }Es Tut sich leider nichts.Muss ich noch etwas in die void Init(void) __wparam {}Funktion reinschreiben ? Quote Link to comment Share on other sites More sharing options...
nILS Posted March 20, 2008 Report Share Posted March 20, 2008 Wenn Du MIDI senden willst musst Du vorher MIOS_MIDI_BeginStream() und danach MIOS_MIDI_EndStream (oder so ähnlich) verwenden. Eventuell auch noch ein FlushBuffer :-) Quote Link to comment Share on other sites More sharing options...
Can128 Posted March 20, 2008 Author Report Share Posted March 20, 2008 ich wollte nicht nur Midi senden sonder das die Funktion void AIN_NotifyChange auf irgend etwas reagiert.MIOS_MIDI_TxBufferPut()ich dachte mit diese funktion wird Midi gesendet.Es wird ja in MidiOx die NoteON/Off und andere werte korekt angezeigt.MIOS_MIDI_BeginStream() MIOS_MIDI_EndStream()Hast du ein beispiel für die beiden funktionen?Die Funktion void AIN_NotifyChange() reagiert ja über habt nicht.LCD müste "AIN Reagiert" anzeigen.ich denke da muss noch was initzialisiert werden aber was ::)Bei DIN ist,s // debouncing value for DINs MIOS_SRIO_DebounceSet(10);Ein beispiel für AIN hab ich nicht gefunden :'( Quote Link to comment Share on other sites More sharing options...
Can128 Posted March 20, 2008 Author Report Share Posted March 20, 2008 Halt hab was gefunden :o also doch es muss was in initzialisiert werden werde gleich mal aus probierenvoid Init(void) __wparam{ // initialize the AIN driver MIOS_AIN_NumberSet(8); // 8 pots are connected MIOS_AIN_UnMuxed(); // the AINX4 modules are *not* used MIOS_AIN_DeadbandSet(7); // should be 7 when 7bit resolution is used} Quote Link to comment Share on other sites More sharing options...
Can128 Posted March 21, 2008 Author Report Share Posted March 21, 2008 Die Funktion void AIN_NotifyChange reagiert jetz auf schieberegler.Nur der pin_value wert wird 4 x von 0-255 gesendet.Es ist so als ob ich 4 schieberegler in einem hätte.hab einiges probiert aber ich kriegs nicht hin :(.void Init(void) __wparam{ // set shift register update frequency MIOS_SRIO_UpdateFrqSet(1); // ms // we need to set at least one IO shift register pair MIOS_SRIO_NumberSet(16); // for 128 pins // debouncing value for DINs MIOS_SRIO_DebounceSet(10); // initialize the AIN driver MIOS_AIN_NumberSet(1); // 8 pots are connected MIOS_AIN_Muxed(); // the AINX4 modules are *not* used MIOS_AIN_DeadbandSet(7);}void AIN_NotifyChange(unsigned char pin, unsigned int pin_value) __wparam{ MIOS_LCD_Clear(); MIOS_LCD_CursorSet(0x00); MIOS_LCD_PrintCString("Pin:"); MIOS_LCD_PrintBCD1(pin); MIOS_LCD_CursorSet(0x07); MIOS_LCD_PrintCString("PinV: "); MIOS_LCD_PrintBCD3(pin_value); MIOS_MIDI_TxBufferPut(0xB0); // Note Event at channel #1 MIOS_MIDI_TxBufferPut(pin); // MIOS_MIDI_TxBufferPut(pin_value); ///////////////////* // unsigned char value; // scale 7bit value between min and max boundary value = Scale_7bit(MIOS_AIN_Pin7bitGet(pin), // converted to 7bit pot_event_map[pin][2], // min value pot_event_map[pin][3]); // max value // send scaled CC value MIOS_MIDI_TxBufferPut(pot_event_map[pin][0]); // first value from table MIOS_MIDI_TxBufferPut(pot_event_map[pin][1]); // second value from table MIOS_MIDI_TxBufferPut(value);*/} Quote Link to comment Share on other sites More sharing options...
Can128 Posted March 21, 2008 Author Report Share Posted March 21, 2008 Habe viele varianten probiert damit der schieberegler von 0-127 sendet.Aber keine richtige lösung gefunden.Ab und zu fehlt eine zahl wie die 1,10,19.00000006957156 ms | [b0 00 16] Channel 1: CC Bank Select value: 2200000006957161 ms | [b0 00 15] Channel 1: CC Bank Select value: 2100000006957168 ms | [b0 00 14] Channel 1: CC Bank Select value: 2000000006957174 ms | [b0 00 12] Channel 1: CC Bank Select value: 1800000006957181 ms | [b0 00 11] Channel 1: CC Bank Select value: 1700000006957187 ms | [b0 00 10] Channel 1: CC Bank Select value: 1600000006957193 ms | [b0 00 0F] Channel 1: CC Bank Select value: 1500000006957200 ms | [b0 00 0E] Channel 1: CC Bank Select value: 1400000006957207 ms | [b0 00 0D] Channel 1: CC Bank Select value: 1300000006957214 ms | [b0 00 0C] Channel 1: CC Bank Select value: 1200000006957222 ms | [b0 00 0B] Channel 1: CC Bank Select value: 1100000006957228 ms | [b0 00 09] Channel 1: CC Bank Select value: 900000006957236 ms | [b0 00 08] Channel 1: CC Bank Select value: 800000006957244 ms | [b0 00 07] Channel 1: CC Bank Select value: 700000006957251 ms | [b0 00 06] Channel 1: CC Bank Select value: 600000006957262 ms | [b0 00 05] Channel 1: CC Bank Select value: 500000006957279 ms | [b0 00 04] Channel 1: CC Bank Select value: 400000006957297 ms | [b0 00 03] Channel 1: CC Bank Select value: 300000006957315 ms | [b0 00 02] Channel 1: CC Bank Select value: 200000006957331 ms | [b0 00 00] Channel 1: CC Bank Select value: 0Hier der code: unsigned char value; void AIN_NotifyChange(unsigned char pin, unsigned int pin_value) __wparam { /* // scale 7bit value between min and max boundary value = Scale_7bit(MIOS_AIN_Pin7bitGet(pin), // converted to 7bit 0, 254); */ // a pot has been moved, send CC# at channel 1 MIOS_MIDI_TxBufferPut(0xb0); // CC at channel 1 MIOS_MIDI_TxBufferPut(pin); // pin number corresponds to CC number MIOS_MIDI_TxBufferPut(MIOS_AIN_Pin7bitGet(pin)); MIOS_LCD_Clear(); MIOS_LCD_CursorSet(0x00); MIOS_LCD_PrintCString("Pin:"); MIOS_LCD_PrintBCD1(pin); MIOS_LCD_CursorSet(0x07); MIOS_LCD_PrintCString("PinV: "); MIOS_LCD_PrintBCD3(MIOS_AIN_Pin7bitGet(pin)); } Ich weiss nicht weiter :( Quote Link to comment Share on other sites More sharing options...
TK. Posted March 21, 2008 Report Share Posted March 21, 2008 Dieses Verhalten koennte mit der automatischen Jitter-Unterdrueckung zusammenhaengen. Mit MIOS_AIN_DeadbandSet(7) wird das Deadband so gelegt, dass nur bei Werteaenderungen im 7bit Bereich die AIN_NotifyChange() Funktion aufgerufen wird. Wenn der Schieberegler jedoch schlecht entstoert ist (klemm mal das Metallgehaeuse auf Masse), oder von schlechter Qualitaet ist, kann es passieren, dass die gemessene Position mal zwischen zwei 7bit Werten (also bspw. zwischen 0x00 und 0x01) schwankt. Und hier vermeidet MIOS, dass dadurch staendig neue MIDI Events generiert werden.Neben der Entstoerung probiere mal folgendes aus: setze das Deadband auf den Wert 5, spaeter auf 3, 1, und schliesslich auf 0. AIN_NotifyChange() sollte nun wesentlich haeufiger aufgerufen werden. Wenn bereits bei 5 und 3 sporadisch Werte gesendet werden, obwohl Du den Schieberegler nicht beruehrst (dann kann auch von der Position der anderen Schieberegler abhaengen!), dann ist es eindeutig ein Jitterproblem.Das Deadband kannst Du entweder in der Applikation aendern (und anschliessend die Applikation neu aufladen), oder waehrend der Laufzeit im Debug Fenster von MIOS StudioGruss, Thorsten. Quote Link to comment Share on other sites More sharing options...
Can128 Posted March 21, 2008 Author Report Share Posted March 21, 2008 Hallo ThorstenDanke erst mal ich dahte es hängt mit den code zusammen weil der schieberegler alleine ab und zu gesendet hat hatte ich das gehäuse mit an minus gelötet.danach hat nur gesendet wenn ich es bewegt habe. Deadband auf 500000011279365 ms | [b0 00 00] Channel 1: CC Bank Select value: 000000011279423 ms | [b0 00 01] Channel 1: CC Bank Select value: 100000011279471 ms | [b0 00 02] Channel 1: CC Bank Select value: 200000011279528 ms | [b0 00 03] Channel 1: CC Bank Select value: 300000011279607 ms | [b0 00 03] Channel 1: CC Bank Select value: 300000011279710 ms | [b0 00 04] Channel 1: CC Bank Select value: 400000011279791 ms | [b0 00 05] Channel 1: CC Bank Select value: 500000011279840 ms | [b0 00 06] Channel 1: CC Bank Select value: 600000011279876 ms | [b0 00 06] Channel 1: CC Bank Select value: 600000011279905 ms | [b0 00 07] Channel 1: CC Bank Select value: 700000011279935 ms | [b0 00 08] Channel 1: CC Bank Select value: 8 Deadband auf 300000011439618 ms | [b0 00 00] Channel 1: CC Bank Select value: 000000011439621 ms | [b0 00 00] Channel 1: CC Bank Select value: 000000011439624 ms | [b0 00 00] Channel 1: CC Bank Select value: 000000011439626 ms | [b0 00 00] Channel 1: CC Bank Select value: 000000011439684 ms | [b0 00 01] Channel 1: CC Bank Select value: 100000011439736 ms | [b0 00 01] Channel 1: CC Bank Select value: 100000011439783 ms | [b0 00 02] Channel 1: CC Bank Select value: 200000011439855 ms | [b0 00 02] Channel 1: CC Bank Select value: 200000011439947 ms | [b0 00 03] Channel 1: CC Bank Select value: 300000011440064 ms | [b0 00 03] Channel 1: CC Bank Select value: 300000011440302 ms | [b0 00 04] Channel 1: CC Bank Select value: 400000011440570 ms | [b0 00 04] Channel 1: CC Bank Select value: 400000011440810 ms | [b0 00 05] Channel 1: CC Bank Select value: 500000011441051 ms | [b0 00 05] Channel 1: CC Bank Select value: 5Mit Deadband auf 2,1,0 ist noch schlimmerich hab nur ein schieberegler dran kein anderes. Quote Link to comment Share on other sites More sharing options...
Can128 Posted March 21, 2008 Author Report Share Posted March 21, 2008 ich habe so eben die applikation ain64_din128_dout128_v1_3drauf gemacht. der schieberegler funktioniert einwand frei00000011956449 ms | [b1 00 00] Channel 2: CC Bank Select value: 000000011957410 ms | [b1 00 01] Channel 2: CC Bank Select value: 100000011957535 ms | [b1 00 02] Channel 2: CC Bank Select value: 200000011957698 ms | [b1 00 03] Channel 2: CC Bank Select value: 300000011957922 ms | [b1 00 04] Channel 2: CC Bank Select value: 400000011958129 ms | [b1 00 05] Channel 2: CC Bank Select value: 500000011958268 ms | [b1 00 06] Channel 2: CC Bank Select value: 600000011958347 ms | [b1 00 07] Channel 2: CC Bank Select value: 700000011958465 ms | [b1 00 08] Channel 2: CC Bank Select value: 800000011958620 ms | [b1 00 09] Channel 2: CC Bank Select value: 900000011958713 ms | [b1 00 0A] Channel 2: CC Bank Select value: 1000000011958792 ms | [b1 00 0B] Channel 2: CC Bank Select value: 1100000011958877 ms | [b1 00 0C] Channel 2: CC Bank Select value: 1200000011959167 ms | [b1 00 0D] Channel 2: CC Bank Select value: 1300000011959293 ms | [b1 00 0E] Channel 2: CC Bank Select value: 1400000011959435 ms | [b1 00 0F] Channel 2: CC Bank Select value: 1500000011959578 ms | [b1 00 10] Channel 2: CC Bank Select value: 1600000011959657 ms | [b1 00 11] Channel 2: CC Bank Select value: 1700000011959941 ms | [b1 00 12] Channel 2: CC Bank Select value: 1800000011960026 ms | [b1 00 13] Channel 2: CC Bank Select value: 1900000011960110 ms | [b1 00 14] Channel 2: CC Bank Select value: 2000000011960219 ms | [b1 00 15] Channel 2: CC Bank Select value: 2100000011960389 ms | [b1 00 16] Channel 2: CC Bank Select value: 2200000011960468 ms | [b1 00 17] Channel 2: CC Bank Select value: 2300000011960533 ms | [b1 00 18] Channel 2: CC Bank Select value: 24Also ist es doch ein code problem Quote Link to comment Share on other sites More sharing options...
TK. Posted March 21, 2008 Report Share Posted March 21, 2008 ich habe so eben die applikation ain64_din128_dout128_v1_3drauf gemacht. der schieberegler funktioniert einwand freiOk, das war natuerlich ein wichtiger Input.Vielleicht dauert die LCD Ausgabe zu lang, so dass ein neuer Wert bereits ansteht, waehrend die Display-Ausgabe noch nicht fertig ist. Es macht ja eigentlich wenig Sinn, jeden Wert sofort auszugeben, das LCD ist wahrscheinlich so traege, dass die Zahlen erst nach ca. 50 mS (oder mehr) sichtbar werden. Hier kann man also noch ein wenig Performance herausholen.In meinen Applikationen mache ich das meistens so, dass ich in einem Flag "vermerke", dass sich der Poti-Wert geaendert hat, diesen dann erst in DISPLAY_Tick() ausgebe, und dort das Flag wieder loesche (so dass der Wert nicht erneut ausgegeben wird). Diese Funktion wird seltener als AIN_NotifyChange() aufgerufen, aber immer noch oft genug, um Werteaenderungen "scheinbar" sofort sichtbar zu machen.Ein C Anwendungsbeispiel findest Du in ain64_din128_dout128_v2_0.zip (suche nach app_flags.DISPLAY_UPDATE_REQ --- das Flag ist in main.h definiert)Gruss, Thorsten. Quote Link to comment Share on other sites More sharing options...
Can128 Posted March 21, 2008 Author Report Share Posted March 21, 2008 Habe jetz alles so gemacht wie du es mir gesagt hast.Die code teile von ain64_din128_dout128_v2_0 hab ich übernommen.von 0 richtung 127 ist alles ok aber wenn zurück geht dann gehen einige zahlen verloren.ich habe die original ain64_din128_dout128_v2_0 applikation draufgespielt das gleiche.Beim zurück schieben von 127 auf 0 gehen einige zahlen verloren.00000023275138 ms | [b0 00 14] Channel 1: CC Bank Select value: 2000000023275143 ms | [b0 00 13] Channel 1: CC Bank Select value: 1900000023275149 ms | [b0 00 12] Channel 1: CC Bank Select value: 1800000023275154 ms | [b0 00 11] Channel 1: CC Bank Select value: 1700000023275160 ms | [b0 00 10] Channel 1: CC Bank Select value: 1600000023275165 ms | [b0 00 0E] Channel 1: CC Bank Select value: 1400000023275171 ms | [b0 00 0D] Channel 1: CC Bank Select value: 1300000023275178 ms | [b0 00 0C] Channel 1: CC Bank Select value: 1200000023275183 ms | [b0 00 0B] Channel 1: CC Bank Select value: 1100000023275190 ms | [b0 00 0A] Channel 1: CC Bank Select value: 1000000023275196 ms | [b0 00 08] Channel 1: CC Bank Select value: 800000023275203 ms | [b0 00 07] Channel 1: CC Bank Select value: 700000023275210 ms | [b0 00 06] Channel 1: CC Bank Select value: 600000023275219 ms | [b0 00 05] Channel 1: CC Bank Select value: 500000023275233 ms | [b0 00 04] Channel 1: CC Bank Select value: 400000023275247 ms | [b0 00 03] Channel 1: CC Bank Select value: 300000023275260 ms | [b0 00 02] Channel 1: CC Bank Select value: 200000023275273 ms | [b0 00 00] Channel 1: CC Bank Select value: 0Dann ain64_din128_dout128_v1_3(Die 7 fehlt)00000000152009 ms | [b1 00 0A] Channel 2: CC Bank Select value: 1000000000152018 ms | [b1 00 09] Channel 2: CC Bank Select value: 900000000152025 ms | [b1 00 08] Channel 2: CC Bank Select value: 800000000152036 ms | [b1 00 06] Channel 2: CC Bank Select value: 600000000152046 ms | [b1 00 05] Channel 2: CC Bank Select value: 500000000152065 ms | [b1 00 04] Channel 2: CC Bank Select value: 400000000152087 ms | [b1 00 03] Channel 2: CC Bank Select value: 300000000152108 ms | [b1 00 02] Channel 2: CC Bank Select value: 200000000152129 ms | [b1 00 01] Channel 2: CC Bank Select value: 100000000152149 ms | [b1 00 00] Channel 2: CC Bank Select value: 0Hat das jetz mit meinem schieberegler zu tun oder ist der effekt bei euch das gleiche? Quote Link to comment Share on other sites More sharing options...
TK. Posted March 21, 2008 Report Share Posted March 21, 2008 Ich denke, dass es an den Schiebereglern liegt - wie lang ist eigentlich der Faderweg? Ich habe das gerade mal mit den 60 mm Fadern von meinem Korg Microkontrol ausprobiert. Es ist ziemlich schwierig, die Fader so genau zu bewegen, dass die gesendeten CC Werte ohne Unterbrechung steigen (oder fallen). Hingegen klappt das mit den 100 mm Alps (Motor-)fadern meiner MBLC voellig problemlos :)Es stellt sich natuerlich auch die Frage, inwiefern das exakte Einstellen eines Wertes fuer Deine Anwendung relevant ist. Hierfuer verwende ich normalerweise gerasterte Encoder (oder Inc/Dec Taster)Gruss, Thorsten. Quote Link to comment Share on other sites More sharing options...
Can128 Posted March 21, 2008 Author Report Share Posted March 21, 2008 Danke für deine antworten Thorsten !Der schieberegler hat 100mm weg.Die genauigkeit ist schon ok es wird damit nur volumen kontroliert.Jetz kann ich mit mein Applikation anfangenDanke Noch mal,sGrüße Can Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.