Проблемы с преобразованием нано -кода Arduino в Maple Mini. Помощь необходима.

Булест
Вт 24 января 2017 г. 16:34
Я пытаюсь преобразовать некоторые мои нано -проекты Arduino, в Maple Leaf Mini с надеждой объединить их в один проект, но адаптация кода оказывается проблематичным, если не сказать больше.

Самый простой проект, Arduitape, - это простой файл WAV, который использует библиотеку TMRPCM, и в то время как он был преобразован в STM32, он упорно отказывается проверять и возвращается со следующей ошибкой.

Ошибка: 'tmrpcm' не называет типа

Tmrpcm tmrpcm; // инициализируйте tmrpcm

Вы можете скачать код Arduino здесь.
https: // mega.NZ/#!Qnty1jcy!jnhxec-qtmhp ... Pwmjxd4o0y

Два других имеют ту же проблему, которая преобразует вызовы библиотеки Timerone в использование Hardwaretimer вместо этого.
Есть несколько функций тайморона, которые не так легко перевести, и мне было интересно, можете ли вы помочь?

Вы можете скачать коды Arduino для Tzxduino один из проектов отсюда. https: // mega.NZ/#!Ирвхиц!GEW4K0JRY4BG ... Hemsz6n7gs

Я полный нуб для STM32, поэтому любая помощь будет оценена.

victor_pv
Вт 24 января 2017 г. 16:53
Булесте написала:Я пытаюсь преобразовать некоторые мои нано -проекты Arduino, в Maple Leaf Mini с надеждой объединить их в один проект, но адаптация кода оказывается проблематичным, если не сказать больше.

Самый простой проект, Arduitape, - это простой файл WAV, который использует библиотеку TMRPCM, и в то время как он был преобразован в STM32, он упорно отказывается проверять и возвращается со следующей ошибкой.

Ошибка: 'tmrpcm' не называет типа

Tmrpcm tmrpcm; // инициализируйте tmrpcm

Вы можете скачать код Arduino здесь.
https: // mega.NZ/#!Qnty1jcy!jnhxec-qtmhp ... Pwmjxd4o0y

Два других имеют ту же проблему, которая преобразует вызовы библиотеки Timerone в использование Hardwaretimer вместо этого.
Есть несколько функций тайморона, которые не так легко перевести, и мне было интересно, можете ли вы помочь?

Вы можете скачать коды Arduino для Tzxduino один из проектов отсюда. https: // mega.NZ/#!Ирвхиц!GEW4K0JRY4BG ... Hemsz6n7gs

Я полный нуб для STM32, поэтому любая помощь будет оценена.

Булест
Вт 24 января 2017 г., 17:42
Спасибо, Виктор.

Я использую вашу версию. Я только только что нашел ваш пример вашего игрока WAV и выяснил, где я иду не так.

Я внес изменения, чтобы теперь он, по крайней мере, проверял и мог быть загружен на мой Maple Leaf Mini, однако похоже, что мне нужно сделать гораздо больше кода, чтобы изменить, включая мой код LCD и SD -карты (ЖК -дисплей находится на I2C1, а SD - это на SPI1 кстати).

https: // mega.NZ/#!Gydhdi7a!Yoxbkmn3d7cm ... Ig4lngfyli
// --------------------------------------------------------------------------------- // DO NOT USE CLASS-10 CARDS on this project - they're too fast to operate using SPI // --------------------------------------------------------------------------------- // ArduiTape Arduino based 8-bit computer tape player. // Play WAV files from an SD card. Based on the TMRpcm code. //#include #include #include #include LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display //TMRpcm tmrpcm; //Initialise tmrpcm SdFat sd; //Initialise Sd card SdFile entry; //SD card file #define filenameLength 100 char fileName[filenameLength+1]; //Current filename char sfileName[13]; const int chipSelect = 7; //Sd card chip select pin // --------------------------------------------------------------------------------- // set cardType to 'oldCard' if using an old SD card (more than a few years old) or // to 'newCard' if using a newly-purchase Class-4 card. int cardType = SPI_FULL_SPEED; // --------------------------------------------------------------------------------- #define btnPlay 20 //Play Button #define btnStop 19 //Stop Button #define btnUp 18 //Menu Up button #define btnDown 17 //Menu Down button #define btnMotor 10 //Motor Sense (connect pin to gnd to play, NC for pause) #define btnMselect 11 //Motor Control on/off button #define scrollSpeed 250 //text scroll delay #define scrollWait 3000 //Delay before scrolling starts byte scrollPos=0; unsigned long scrollTime=millis()+scrollWait; int mselectState = 1;//Motor control state 1=on 0=off int wasPlaying = 0; //Was there a file playing? int motorState = 1; //Current motor control state int finished = 0; //Has the file finished? int start = 0; //Currently playing flag int pauseOn = 0; //Pause state int currentFile = 1; //Current position in directory int maxFile = 0; //Total number of files in directory int isDir = 0; //Is the current file a directory unsigned long timeDiff = 0; //button debounce void setup() { lcd.init(); //Initialise LCD (16x2 type) lcd.backlight(); pinMode(chipSelect, OUTPUT); //Setup SD card chipselect pin if (!sd.begin(chipSelect,cardType)) { //Start SD card and check it's working lcd_clearline(0); lcd.print("No SD Card"); return; } sd.chdir(); //set SD to root directory speakerPin = 9; //Set speaker pin pinMode(btnPlay,INPUT_PULLUP); digitalWrite(btnPlay,HIGH); pinMode(btnStop,INPUT_PULLUP); digitalWrite(btnStop,HIGH); pinMode(btnUp,INPUT_PULLUP); digitalWrite(btnUp,HIGH); pinMode(btnDown,INPUT_PULLUP); digitalWrite(btnDown,HIGH); pinMode(btnMotor, INPUT_PULLUP); digitalWrite(btnMotor,HIGH); pinMode(btnMselect, INPUT_PULLUP); digitalWrite(btnMselect, HIGH);//Setup buttons with internal pullup lcd.clear(); lcd.print("ArduiTape v1.4"); delay(1000); lcd.clear(); getMaxFile(); //get the total number of files in the directory seekFile(currentFile); //move to the first file in the directory lcd_clearline(0); lcd.print("Ready"); } void loop(void) { if(!TMRpcm_playing && wasPlaying == 1) { stopFile(); //if the file has finished stop trying to play the file } if((millis()>=scrollTime) && start==0 && (strlen(fileName)>16)) { scrollTime = millis()+scrollSpeed; scrollText(fileName); scrollPos +=1; if(scrollPos>strlen(fileName)) { scrollPos=0; scrollTime=millis()+scrollWait; scrollText(fileName); } } motorState=digitalRead(btnMotor); if (millis() - timeDiff > 50) { // check switch every 100ms timeDiff = millis(); // get current millisecond count if(digitalRead(btnPlay) == LOW) { if(start==0) { playFile(); delay(200); } else { while(digitalRead(btnPlay)==LOW) { delay(50); } TMRpcm_pause(); if (pauseOn == 0) { lcd_clearline(0); lcd.print("Paused"); pauseOn = 1; } else { lcd_clearline(0); lcd.print("Playing"); pauseOn = 0; } } } if(digitalRead(btnMselect)==LOW){ if(mselectState==0) { lcd_clearline(0); lcd.print("Motor CTRL On"); mselectState=1; } else { lcd_clearline(0); lcd.print("Motor CTRL Off"); mselectState=0; } while(digitalRead(btnMselect)==LOW) { delay(50); } } if(digitalRead(btnStop)==LOW && start==1) { stopFile(); delay(200); } else { if (digitalRead(btnStop)==LOW && start==0){ //Return to root of the SD card. sd.chdir(true); getMaxFile(); currentFile=1; seekFile(currentFile); while(digitalRead(btnStop)==LOW) { //prevent button repeats by waiting until the button is released. delay(50); } } } if(digitalRead(btnUp)==LOW && start==0) { upFile(); while(digitalRead(btnUp)==LOW) { delay(50); //wait until button is released } } if(digitalRead(btnDown)==LOW && start==0) { downFile(); while(digitalRead(btnDown)==LOW) { delay(50); } } if(mselectState==1 && start==1) { //if file is playing and motor control is on then handle current motor state if(motorState==1 && pauseOn==0) { TMRpcm_pause(); lcd_clearline(0); lcd.print("Paused"); pauseOn = 1; } if(motorState==0 && pauseOn==1) { TMRpcm_pause(); lcd_clearline(0); lcd.print("Playing"); pauseOn = 0; } } } } void upFile() { //move up a file in the directory currentFile--; if(currentFile<1) { getMaxFile(); currentFile = maxFile; } seekFile(currentFile); } void downFile() { //move down a file in the directory currentFile++; if(currentFile>maxFile) { currentFile=1; } seekFile(currentFile); } void seekFile(int pos) { //move to a set position in the directory, store the filename, and display the name on screen. entry.cwd()->rewind(); for(int i=1;i<=currentFile;i++) { entry.openNext(entry.cwd(),O_READ); entry.getName(fileName,filenameLength); entry.getSFN(sfileName); if(entry.isDir() || !strcmp(sfileName, "ROOT")) { isDir=1; } else { isDir=0; } entry.close(); } lcd_clearline(1); scrollPos=0; scrollText(fileName); } void stopFile() { TMRpcm_stopPlayback(); if(start==1){ lcd_clearline(0); lcd.print("Stopped"); start=0; } } void playFile() { if(isDir==1) { changeDir(); } else { if(entry.cwd()->exists(sfileName)) { lcd_clearline(0); lcd.print("Playing"); lcd_clearline(1); scrollPos=0; scrollText(fileName); TMRpcm_play(sfileName); wasPlaying = 1; start=1; TMRpcm_pause(); lcd_clearline(0); lcd.print("Paused"); pauseOn = 1; } else { lcd_clearline(1); lcd.print("No File Selected"); } } } void getMaxFile() { //gets the total files in the current directory and stores the number in maxFile entry.cwd()->rewind(); maxFile=0; while(entry.openNext(entry.cwd(),O_READ)) { entry.getName(fileName,filenameLength); entry.close(); maxFile++; } entry.cwd()->rewind(); } void lcd_clearline(int l) { //clear a single line on the LCD lcd.setCursor(0,l); lcd.print(" "); lcd.setCursor(0,l); } void changeDir() { //change directory, if fileName="ROOT" then return to the root directory //SDFat has no easy way to move up a directory, so returning to root is the easiest way. //each directory (except the root) must have a file called ROOT (no extension) if(!strcmp(fileName, "ROOT")) { sd.chdir(true); } else { sd.chdir(fileName, true); } getMaxFile(); currentFile=1; seekFile(currentFile); } void scrollText(char* text) { if(scrollPos<0) scrollPos=0; char outtext[16]; for(int i=0;i<16;i++) { int p=i+scrollPos; if(p

victor_pv
Вторник 24 января 2017 г. 18:31
Булесте написала:Спасибо, Виктор.

Я использую вашу версию. Я только только что нашел ваш пример вашего игрока WAV и выяснил, где я иду не так.

Я внес изменения, чтобы теперь он, по крайней мере, проверял и мог быть загружен на мой Maple Leaf Mini, однако похоже, что мне нужно сделать гораздо больше кода, чтобы изменить, включая мой код LCD и SD -карты (ЖК -дисплей находится на I2C1, а SD - это на SPI1 кстати).

https: // mega.NZ/#!Gydhdi7a!Yoxbkmn3d7cm ... Ig4lngfyli
// --------------------------------------------------------------------------------- // DO NOT USE CLASS-10 CARDS on this project - they're too fast to operate using SPI // --------------------------------------------------------------------------------- // ArduiTape Arduino based 8-bit computer tape player. // Play WAV files from an SD card. Based on the TMRpcm code. //#include #include #include #include LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display //TMRpcm tmrpcm; //Initialise tmrpcm SdFat sd; //Initialise Sd card SdFile entry; //SD card file #define filenameLength 100 char fileName[filenameLength+1]; //Current filename char sfileName[13]; const int chipSelect = 7; //Sd card chip select pin // --------------------------------------------------------------------------------- // set cardType to 'oldCard' if using an old SD card (more than a few years old) or // to 'newCard' if using a newly-purchase Class-4 card. int cardType = SPI_FULL_SPEED; // --------------------------------------------------------------------------------- #define btnPlay 20 //Play Button #define btnStop 19 //Stop Button #define btnUp 18 //Menu Up button #define btnDown 17 //Menu Down button #define btnMotor 10 //Motor Sense (connect pin to gnd to play, NC for pause) #define btnMselect 11 //Motor Control on/off button #define scrollSpeed 250 //text scroll delay #define scrollWait 3000 //Delay before scrolling starts byte scrollPos=0; unsigned long scrollTime=millis()+scrollWait; int mselectState = 1;//Motor control state 1=on 0=off int wasPlaying = 0; //Was there a file playing? int motorState = 1; //Current motor control state int finished = 0; //Has the file finished? int start = 0; //Currently playing flag int pauseOn = 0; //Pause state int currentFile = 1; //Current position in directory int maxFile = 0; //Total number of files in directory int isDir = 0; //Is the current file a directory unsigned long timeDiff = 0; //button debounce void setup() { lcd.init(); //Initialise LCD (16x2 type) lcd.backlight(); pinMode(chipSelect, OUTPUT); //Setup SD card chipselect pin if (!sd.begin(chipSelect,cardType)) { //Start SD card and check it's working lcd_clearline(0); lcd.print("No SD Card"); return; } sd.chdir(); //set SD to root directory speakerPin = 9; //Set speaker pin pinMode(btnPlay,INPUT_PULLUP); digitalWrite(btnPlay,HIGH); pinMode(btnStop,INPUT_PULLUP); digitalWrite(btnStop,HIGH); pinMode(btnUp,INPUT_PULLUP); digitalWrite(btnUp,HIGH); pinMode(btnDown,INPUT_PULLUP); digitalWrite(btnDown,HIGH); pinMode(btnMotor, INPUT_PULLUP); digitalWrite(btnMotor,HIGH); pinMode(btnMselect, INPUT_PULLUP); digitalWrite(btnMselect, HIGH);//Setup buttons with internal pullup lcd.clear(); lcd.print("ArduiTape v1.4"); delay(1000); lcd.clear(); getMaxFile(); //get the total number of files in the directory seekFile(currentFile); //move to the first file in the directory lcd_clearline(0); lcd.print("Ready"); } void loop(void) { if(!TMRpcm_playing && wasPlaying == 1) { stopFile(); //if the file has finished stop trying to play the file } if((millis()>=scrollTime) && start==0 && (strlen(fileName)>16)) { scrollTime = millis()+scrollSpeed; scrollText(fileName); scrollPos +=1; if(scrollPos>strlen(fileName)) { scrollPos=0; scrollTime=millis()+scrollWait; scrollText(fileName); } } motorState=digitalRead(btnMotor); if (millis() - timeDiff > 50) { // check switch every 100ms timeDiff = millis(); // get current millisecond count if(digitalRead(btnPlay) == LOW) { if(start==0) { playFile(); delay(200); } else { while(digitalRead(btnPlay)==LOW) { delay(50); } TMRpcm_pause(); if (pauseOn == 0) { lcd_clearline(0); lcd.print("Paused"); pauseOn = 1; } else { lcd_clearline(0); lcd.print("Playing"); pauseOn = 0; } } } if(digitalRead(btnMselect)==LOW){ if(mselectState==0) { lcd_clearline(0); lcd.print("Motor CTRL On"); mselectState=1; } else { lcd_clearline(0); lcd.print("Motor CTRL Off"); mselectState=0; } while(digitalRead(btnMselect)==LOW) { delay(50); } } if(digitalRead(btnStop)==LOW && start==1) { stopFile(); delay(200); } else { if (digitalRead(btnStop)==LOW && start==0){ //Return to root of the SD card. sd.chdir(true); getMaxFile(); currentFile=1; seekFile(currentFile); while(digitalRead(btnStop)==LOW) { //prevent button repeats by waiting until the button is released. delay(50); } } } if(digitalRead(btnUp)==LOW && start==0) { upFile(); while(digitalRead(btnUp)==LOW) { delay(50); //wait until button is released } } if(digitalRead(btnDown)==LOW && start==0) { downFile(); while(digitalRead(btnDown)==LOW) { delay(50); } } if(mselectState==1 && start==1) { //if file is playing and motor control is on then handle current motor state if(motorState==1 && pauseOn==0) { TMRpcm_pause(); lcd_clearline(0); lcd.print("Paused"); pauseOn = 1; } if(motorState==0 && pauseOn==1) { TMRpcm_pause(); lcd_clearline(0); lcd.print("Playing"); pauseOn = 0; } } } } void upFile() { //move up a file in the directory currentFile--; if(currentFile<1) { getMaxFile(); currentFile = maxFile; } seekFile(currentFile); } void downFile() { //move down a file in the directory currentFile++; if(currentFile>maxFile) { currentFile=1; } seekFile(currentFile); } void seekFile(int pos) { //move to a set position in the directory, store the filename, and display the name on screen. entry.cwd()->rewind(); for(int i=1;i<=currentFile;i++) { entry.openNext(entry.cwd(),O_READ); entry.getName(fileName,filenameLength); entry.getSFN(sfileName); if(entry.isDir() || !strcmp(sfileName, "ROOT")) { isDir=1; } else { isDir=0; } entry.close(); } lcd_clearline(1); scrollPos=0; scrollText(fileName); } void stopFile() { TMRpcm_stopPlayback(); if(start==1){ lcd_clearline(0); lcd.print("Stopped"); start=0; } } void playFile() { if(isDir==1) { changeDir(); } else { if(entry.cwd()->exists(sfileName)) { lcd_clearline(0); lcd.print("Playing"); lcd_clearline(1); scrollPos=0; scrollText(fileName); TMRpcm_play(sfileName); wasPlaying = 1; start=1; TMRpcm_pause(); lcd_clearline(0); lcd.print("Paused"); pauseOn = 1; } else { lcd_clearline(1); lcd.print("No File Selected"); } } } void getMaxFile() { //gets the total files in the current directory and stores the number in maxFile entry.cwd()->rewind(); maxFile=0; while(entry.openNext(entry.cwd(),O_READ)) { entry.getName(fileName,filenameLength); entry.close(); maxFile++; } entry.cwd()->rewind(); } void lcd_clearline(int l) { //clear a single line on the LCD lcd.setCursor(0,l); lcd.print(" "); lcd.setCursor(0,l); } void changeDir() { //change directory, if fileName="ROOT" then return to the root directory //SDFat has no easy way to move up a directory, so returning to root is the easiest way. //each directory (except the root) must have a file called ROOT (no extension) if(!strcmp(fileName, "ROOT")) { sd.chdir(true); } else { sd.chdir(fileName, true); } getMaxFile(); currentFile=1; seekFile(currentFile); } void scrollText(char* text) { if(scrollPos<0) scrollPos=0; char outtext[16]; for(int i=0;i<16;i++) { int p=i+scrollPos; if(p

Булест
Ср 25 января 2017 г., 19:05
Это звучит великолепно. Было бы неплохо получить TMRPCM полностью функциональным.

РЕДАКТИРОВАТЬ: Удали, чтобы все проверили, но не могу получить его, чтобы распознать SD -карту на данный момент. Я знаю, что это правильно подключено как SD.h Пример может найти и прочитать это. Мне, вероятно, нужно использовать другую библиотеку.

Булест
Чт 26 января 2017 г. 15:15
Неа. Не проблема с SDFAT, поэтому это должна быть проблема с кнопками или, скорее, кодом для кнопок.

РЕДАКТИРОВАТЬ
Изменил часть кода и булавок, и некоторые кнопки работают правильно сейчас работают. Я могу хотя бы прокручивать вверх и вниз по файлам.
Не могу ничего сыграть, хотя еще хотя.
// --------------------------------------------------------------------------------- // DO NOT USE CLASS-10 CARDS on this project - they're too fast to operate using SPI // --------------------------------------------------------------------------------- // ArduiTape Arduino based 8-bit computer tape player. // Play WAV files from an SD card. Based on the TMRpcm code. #include #include #include #include #include LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display //TMRpcm tmrpcm; //Initialise tmrpcm SdFat SD; //Initialise Sd card SdFile entry; //SD card file #define filenameLength 100 char fileName[filenameLength+1]; //Current filename char sfileName[13]; const int SD_ChipSelectPin = 8; //Sd card chip select pin // --------------------------------------------------------------------------------- //int cardType = SPI_CLOCK_DIV2; // --------------------------------------------------------------------------------- #define btnPlay 3 //Play Button #define btnStop 2 //Stop Button #define btnUp 1 //Menu Up button #define btnDown 0 //Menu Down button #define btnMotor 10 //Motor Sense (connect pin to gnd to play, NC for pause) #define btnMselect 11 //Motor Control on/off button #define scrollSpeed 250 //text scroll delay #define scrollWait 3000 //Delay before scrolling starts byte scrollPos=0; unsigned long scrollTime=millis()+scrollWait; int mselectState = 1;//Motor control state 1=on 0=off int wasPlaying = 0; //Was there a file playing? int motorState = 1; //Current motor control state int finished = 0; //Has the file finished? int start = 0; //Currently playing flag int pauseOn = 0; //Pause state int currentFile = 1; //Current position in directory int maxFile = 0; //Total number of files in directory int isDir = 0; //Is the current file a directory unsigned long timeDiff = 0; //button debounce void setup() { lcd.init(); //Initialise LCD (16x2 type) lcd.backlight(); pinMode(SD_ChipSelectPin, OUTPUT); //Setup SD card chipselect pin if (!SD.begin(SD_ChipSelectPin,SPI_CLOCK_DIV4)) { //Start SD card and check it's working lcd_clearline(0); lcd.print("No SD Card"); return; } SD.chdir(); //set SD to root directory speakerPin = 9; //Set speaker pin pinMode(btnPlay,INPUT_PULLUP); digitalWrite(btnPlay,HIGH); pinMode(btnStop,INPUT_PULLUP); digitalWrite(btnStop,HIGH); pinMode(btnUp,INPUT_PULLUP); digitalWrite(btnUp,HIGH); pinMode(btnDown,INPUT_PULLUP); digitalWrite(btnDown,HIGH); //pinMode(btnMotor, INPUT_PULLUP); //digitalWrite(btnMotor,LOW); //pinMode(btnMselect, INPUT_PULLUP); //digitalWrite(btnMselect, LOW);//Setup buttons with internal pullup lcd.clear(); lcd.print("ArduiTape v1.4"); delay(1000); lcd.clear(); getMaxFile(); //get the total number of files in the directory seekFile(currentFile); //move to the first file in the directory lcd_clearline(0); lcd.print("Ready"); } void loop(void) { if(!TMRpcm_playing && wasPlaying == 1) { stopFile(); //if the file has finished stop trying to play the file } if((millis()>=scrollTime) && start==0 && (strlen(fileName)>16)) { scrollTime = millis()+scrollSpeed; scrollText(fileName); scrollPos +=1; if(scrollPos>strlen(fileName)) { scrollPos=0; scrollTime=millis()+scrollWait; scrollText(fileName); } } motorState=digitalRead(btnMotor); if (millis() - timeDiff > 50) { // check switch every 100ms timeDiff = millis(); // get current millisecond count if(digitalRead(btnPlay) == LOW) { if(start==0) { playFile(); delay(200); } else { while(digitalRead(btnPlay)==LOW) { delay(50); } TMRpcm_pause(); if (pauseOn == 0) { lcd_clearline(0); lcd.print("Paused"); pauseOn = 1; } else { lcd_clearline(0); lcd.print("Playing"); pauseOn = 0; } } } /*if(digitalRead(btnMselect)==LOW){ if(mselectState==0) { lcd_clearline(0); lcd.print("Motor CTRL On"); mselectState=1; } else { lcd_clearline(0); lcd.print("Motor CTRL Off"); mselectState=0; } while(digitalRead(btnMselect)==LOW) { delay(50); } }*/ if(digitalRead(btnStop)==LOW && start==1) { stopFile(); delay(200); } else { if (digitalRead(btnStop)==LOW && start==0){ //Return to root of the SD card. SD.chdir(true); getMaxFile(); currentFile=1; seekFile(currentFile); while(digitalRead(btnStop)==LOW) { //prevent button repeats by waiting until the button is released. delay(50); } } } if(digitalRead(btnUp)==LOW && start==0) { upFile(); while(digitalRead(btnUp)==LOW) { delay(50); //wait until button is released } } if(digitalRead(btnDown)==LOW && start==0) { downFile(); while(digitalRead(btnDown)==LOW) { delay(50); } } /*if(mselectState==1 && start==1) { //if file is playing and motor control is on then handle current motor state if(motorState==1 && pauseOn==0) { TMRpcm_pause(); lcd_clearline(0); lcd.print("Paused"); pauseOn = 1; } if(motorState==0 && pauseOn==1) { TMRpcm_pause(); lcd_clearline(0); lcd.print("Playing"); pauseOn = 0; } }*/ } } void upFile() { //move up a file in the directory currentFile--; if(currentFile<1) { getMaxFile(); currentFile = maxFile; } seekFile(currentFile); } void downFile() { //move down a file in the directory currentFile++; if(currentFile>maxFile) { currentFile=1; } seekFile(currentFile); } void seekFile(int pos) { //move to a set position in the directory, store the filename, and display the name on screen. entry.cwd()->rewind(); for(int i=1;i<=currentFile;i++) { entry.openNext(entry.cwd(),O_READ); entry.getName(fileName,filenameLength); entry.getSFN(sfileName); if(entry.isDir() || !strcmp(sfileName, "ROOT")) { isDir=1; } else { isDir=0; } entry.close(); } lcd_clearline(1); scrollPos=0; scrollText(fileName); } void stopFile() { TMRpcm_stopPlayback(); if(start==1){ lcd_clearline(0); lcd.print("Stopped"); start=0; } } void playFile() { if(isDir==1) { changeDir(); } else { if(entry.cwd()->exists(sfileName)) { lcd_clearline(0); lcd.print("Playing"); lcd_clearline(1); scrollPos=0; scrollText(fileName); TMRpcm_play(sfileName); wasPlaying = 1; start=1; TMRpcm_pause(); lcd_clearline(0); lcd.print("Paused"); pauseOn = 1; } else { lcd_clearline(1); lcd.print("No File Selected"); } } } void getMaxFile() { //gets the total files in the current directory and stores the number in maxFile entry.cwd()->rewind(); maxFile=0; while(entry.openNext(entry.cwd(),O_READ)) { entry.getName(fileName,filenameLength); entry.close(); maxFile++; } entry.cwd()->rewind(); } void lcd_clearline(int l) { //clear a single line on the LCD lcd.setCursor(0,l); lcd.print(" "); lcd.setCursor(0,l); } void changeDir() { //change directory, if fileName="ROOT" then return to the root directory //SDFat has no easy way to move up a directory, so returning to root is the easiest way. //each directory (except the root) must have a file called ROOT (no extension) if(!strcmp(fileName, "ROOT")) { SD.chdir(true); } else { SD.chdir(fileName, true); } getMaxFile(); currentFile=1; seekFile(currentFile); } void scrollText(char* text) { if(scrollPos<0) scrollPos=0; char outtext[16]; for(int i=0;i<16;i++) { int p=i+scrollPos; if(p

victor_pv
Чт 26 января 2017 г., 17:22
Булесте написала:Неа. Не проблема с SDFAT, поэтому это должна быть проблема с кнопками или, скорее, кодом для кнопок.

РЕДАКТИРОВАТЬ
Изменил часть кода и булавок, и некоторые кнопки работают правильно сейчас работают. Я могу хотя бы прокручивать вверх и вниз по файлам.
Не могу ничего сыграть, хотя еще хотя.
// --------------------------------------------------------------------------------- // DO NOT USE CLASS-10 CARDS on this project - they're too fast to operate using SPI // --------------------------------------------------------------------------------- // ArduiTape Arduino based 8-bit computer tape player. // Play WAV files from an SD card. Based on the TMRpcm code. #include #include #include #include #include LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display //TMRpcm tmrpcm; //Initialise tmrpcm SdFat SD; //Initialise Sd card SdFile entry; //SD card file #define filenameLength 100 char fileName[filenameLength+1]; //Current filename char sfileName[13]; const int SD_ChipSelectPin = 8; //Sd card chip select pin // --------------------------------------------------------------------------------- //int cardType = SPI_CLOCK_DIV2; // --------------------------------------------------------------------------------- #define btnPlay 3 //Play Button #define btnStop 2 //Stop Button #define btnUp 1 //Menu Up button #define btnDown 0 //Menu Down button #define btnMotor 10 //Motor Sense (connect pin to gnd to play, NC for pause) #define btnMselect 11 //Motor Control on/off button #define scrollSpeed 250 //text scroll delay #define scrollWait 3000 //Delay before scrolling starts byte scrollPos=0; unsigned long scrollTime=millis()+scrollWait; int mselectState = 1;//Motor control state 1=on 0=off int wasPlaying = 0; //Was there a file playing? int motorState = 1; //Current motor control state int finished = 0; //Has the file finished? int start = 0; //Currently playing flag int pauseOn = 0; //Pause state int currentFile = 1; //Current position in directory int maxFile = 0; //Total number of files in directory int isDir = 0; //Is the current file a directory unsigned long timeDiff = 0; //button debounce void setup() { lcd.init(); //Initialise LCD (16x2 type) lcd.backlight(); pinMode(SD_ChipSelectPin, OUTPUT); //Setup SD card chipselect pin if (!SD.begin(SD_ChipSelectPin,SPI_CLOCK_DIV4)) { //Start SD card and check it's working lcd_clearline(0); lcd.print("No SD Card"); return; } SD.chdir(); //set SD to root directory speakerPin = 9; //Set speaker pin pinMode(btnPlay,INPUT_PULLUP); digitalWrite(btnPlay,HIGH); pinMode(btnStop,INPUT_PULLUP); digitalWrite(btnStop,HIGH); pinMode(btnUp,INPUT_PULLUP); digitalWrite(btnUp,HIGH); pinMode(btnDown,INPUT_PULLUP); digitalWrite(btnDown,HIGH); //pinMode(btnMotor, INPUT_PULLUP); //digitalWrite(btnMotor,LOW); //pinMode(btnMselect, INPUT_PULLUP); //digitalWrite(btnMselect, LOW);//Setup buttons with internal pullup lcd.clear(); lcd.print("ArduiTape v1.4"); delay(1000); lcd.clear(); getMaxFile(); //get the total number of files in the directory seekFile(currentFile); //move to the first file in the directory lcd_clearline(0); lcd.print("Ready"); } void loop(void) { if(!TMRpcm_playing && wasPlaying == 1) { stopFile(); //if the file has finished stop trying to play the file } if((millis()>=scrollTime) && start==0 && (strlen(fileName)>16)) { scrollTime = millis()+scrollSpeed; scrollText(fileName); scrollPos +=1; if(scrollPos>strlen(fileName)) { scrollPos=0; scrollTime=millis()+scrollWait; scrollText(fileName); } } motorState=digitalRead(btnMotor); if (millis() - timeDiff > 50) { // check switch every 100ms timeDiff = millis(); // get current millisecond count if(digitalRead(btnPlay) == LOW) { if(start==0) { playFile(); delay(200); } else { while(digitalRead(btnPlay)==LOW) { delay(50); } TMRpcm_pause(); if (pauseOn == 0) { lcd_clearline(0); lcd.print("Paused"); pauseOn = 1; } else { lcd_clearline(0); lcd.print("Playing"); pauseOn = 0; } } } /*if(digitalRead(btnMselect)==LOW){ if(mselectState==0) { lcd_clearline(0); lcd.print("Motor CTRL On"); mselectState=1; } else { lcd_clearline(0); lcd.print("Motor CTRL Off"); mselectState=0; } while(digitalRead(btnMselect)==LOW) { delay(50); } }*/ if(digitalRead(btnStop)==LOW && start==1) { stopFile(); delay(200); } else { if (digitalRead(btnStop)==LOW && start==0){ //Return to root of the SD card. SD.chdir(true); getMaxFile(); currentFile=1; seekFile(currentFile); while(digitalRead(btnStop)==LOW) { //prevent button repeats by waiting until the button is released. delay(50); } } } if(digitalRead(btnUp)==LOW && start==0) { upFile(); while(digitalRead(btnUp)==LOW) { delay(50); //wait until button is released } } if(digitalRead(btnDown)==LOW && start==0) { downFile(); while(digitalRead(btnDown)==LOW) { delay(50); } } /*if(mselectState==1 && start==1) { //if file is playing and motor control is on then handle current motor state if(motorState==1 && pauseOn==0) { TMRpcm_pause(); lcd_clearline(0); lcd.print("Paused"); pauseOn = 1; } if(motorState==0 && pauseOn==1) { TMRpcm_pause(); lcd_clearline(0); lcd.print("Playing"); pauseOn = 0; } }*/ } } void upFile() { //move up a file in the directory currentFile--; if(currentFile<1) { getMaxFile(); currentFile = maxFile; } seekFile(currentFile); } void downFile() { //move down a file in the directory currentFile++; if(currentFile>maxFile) { currentFile=1; } seekFile(currentFile); } void seekFile(int pos) { //move to a set position in the directory, store the filename, and display the name on screen. entry.cwd()->rewind(); for(int i=1;i<=currentFile;i++) { entry.openNext(entry.cwd(),O_READ); entry.getName(fileName,filenameLength); entry.getSFN(sfileName); if(entry.isDir() || !strcmp(sfileName, "ROOT")) { isDir=1; } else { isDir=0; } entry.close(); } lcd_clearline(1); scrollPos=0; scrollText(fileName); } void stopFile() { TMRpcm_stopPlayback(); if(start==1){ lcd_clearline(0); lcd.print("Stopped"); start=0; } } void playFile() { if(isDir==1) { changeDir(); } else { if(entry.cwd()->exists(sfileName)) { lcd_clearline(0); lcd.print("Playing"); lcd_clearline(1); scrollPos=0; scrollText(fileName); TMRpcm_play(sfileName); wasPlaying = 1; start=1; TMRpcm_pause(); lcd_clearline(0); lcd.print("Paused"); pauseOn = 1; } else { lcd_clearline(1); lcd.print("No File Selected"); } } } void getMaxFile() { //gets the total files in the current directory and stores the number in maxFile entry.cwd()->rewind(); maxFile=0; while(entry.openNext(entry.cwd(),O_READ)) { entry.getName(fileName,filenameLength); entry.close(); maxFile++; } entry.cwd()->rewind(); } void lcd_clearline(int l) { //clear a single line on the LCD lcd.setCursor(0,l); lcd.print(" "); lcd.setCursor(0,l); } void changeDir() { //change directory, if fileName="ROOT" then return to the root directory //SDFat has no easy way to move up a directory, so returning to root is the easiest way. //each directory (except the root) must have a file called ROOT (no extension) if(!strcmp(fileName, "ROOT")) { SD.chdir(true); } else { SD.chdir(fileName, true); } getMaxFile(); currentFile=1; seekFile(currentFile); } void scrollText(char* text) { if(scrollPos<0) scrollPos=0; char outtext[16]; for(int i=0;i<16;i++) { int p=i+scrollPos; if(p

Булест
Чт 26 января 2017 г., 17:37
Я пытался просто проверить, так как у меня нет экрана, и, кажется, просто получаю следующую ошибку.

Статус выхода 1
«Обмен» не был объявлен в этом объеме

У меня есть ILI9341, хотя я мог бы попробовать это. Просто нужно выяснить, что подключить туда.

victor_pv
Чт 26 января 2017 г. 20:52
Булесте написала:Я пытался просто проверить, так как у меня нет экрана, и, кажется, просто получаю следующую ошибку.

Статус выхода 1
«Обмен» не был объявлен в этом объеме

У меня есть ILI9341, хотя я мог бы попробовать это. Просто нужно выяснить, что подключить туда.

Булест
Пт 27 января 2017 г. 15:13
Спасибо за это. Добавлен буфер, и сейчас он пытается воспроизводить файлы.

Звук ужасен для всех различных волн, которые я пробовал, но это начало. Добиваться успеха, и это то, что имеет значение.

victor_pv
Пт 27 января 2017 г. 16:27
Булесте написала:Спасибо за это. Добавлен буфер, и сейчас он пытается воспроизводить файлы.

Звук ужасен для всех различных волн, которые я пробовал, но это начало. Добиваться успеха, и это то, что имеет значение.

Булест
Пт 27 января 2017 г., 19:40
По сути это просто звучит как клики. Я использую LM386 для усиления звука. Я пробовал 16-битный 8-битный, стерео и моно все различные частоты.

Я просто вижу, смогу ли я заставить вашего игрока работать над ILI9341. Получил графику, но пока нет звука, хотя это может быть моей SD -картой на данный момент.

victor_pv
Пт 27 января 2017 г. 20:55
Булесте написала:По сути это просто звучит как клики. Я использую LM386 для усиления звука. Я пробовал 16-битный 8-битный, стерео и моно все различные частоты.

Я просто вижу, смогу ли я заставить вашего игрока работать над ILI9341. Получил графику, но пока нет звука, хотя это может быть моей SD -картой на данный момент.

victor_pv
Сб 28 января 2017 г. 1:38
Кстати, это ваш проект?
https: // chackaday.io/project/2876-arduitape

Если это так, я читал тебя, скорее, взять квадратную волну.
Для этого было бы лучше, если бы вы пропустили все вещи PWM, и просто установите высокий или низкий штифт в зависимости от того, больше ли выбора значения или меньше, чем число. Это было бы гораздо проще реализовать на всех уровнях и даст вам идеально квадратную волну.

Булест
Сб 28 января 2017 г. 11:29
Это старая версия проекта, но да.
Последняя версия всех проектов, которые я пытаюсь преобразовать, можно найти здесь, можно найти. http: // arduitapemarkii.блог.сопутствующий.Великобритания/

victor_pv
Сб 28 января 2017 г. 13:46
Булесте написала:Это старая версия проекта, но да.
Последняя версия всех проектов, которые я пытаюсь преобразовать, можно найти здесь, можно найти. http: // arduitapemarkii.блог.сопутствующий.Великобритания/

Булест
Сб 28 января 2017 г., 17:49
Я один из оригинальных авторов.


На данный момент у меня все равно проблемы.
Я загрузил свой Maple Mini в Bootloader 2, а SDFAT перестал работать и не обнаружил SD -карту.
Я только что удостоверился, что у меня есть ваша последняя библиотека SDFAT, и это бросает ошибку.

victor_pv
Сб 28 января 2017 г. 11:45
Булесте написала:Я один из оригинальных авторов.


На данный момент у меня все равно проблемы.
Я загрузил свой Maple Mini в Bootloader 2, а SDFAT перестал работать и не обнаружил SD -карту.
Я только что удостоверился, что у меня есть ваша последняя библиотека SDFAT, и это бросает ошибку.

Булест
Солнце 29 января 2017 г. 11:08
victor_pv написал: Загрузчик не должен влиять на SD -карту. Bootloader обрабатывает полное управление загруженным кодом. Вы обновили что -нибудь еще?

victor_pv
Солнце 29 января 2017 г., 17:08
Булесте написала:victor_pv написал: Загрузчик не должен влиять на SD -карту. Bootloader обрабатывает полное управление загруженным кодом. Вы обновили что -нибудь еще?

Булест
Солнце 29 января 2017 г., 19:03
Хорошо. По какой -то причине SDFAT терпит неудачу в SD.начинать();

Я использовал пример SDINFO в SDFAT и получил следующее. SdFat version: 20150321 Assuming the SD is the only SPI device. Edit DISABLE_CHIP_SELECT to disable another device. Assuming the SD chip select pin is: 8 Edit SD_CHIP_SELECT to change the SD chip select pin. type any character to start cardBegin failed SD errorCode: 0X1 SD errorData: 0X0 type any character to start

victor_pv
Солнце 29 января 2017 г., 19:33
Булесте написала:Хорошо. По какой -то причине SDFAT терпит неудачу в SD.начинать();

Я использовал пример SDINFO в SDFAT и получил следующее. SdFat version: 20150321 Assuming the SD is the only SPI device. Edit DISABLE_CHIP_SELECT to disable another device. Assuming the SD chip select pin is: 8 Edit SD_CHIP_SELECT to change the SD chip select pin. type any character to start cardBegin failed SD errorCode: 0X1 SD errorData: 0X0 type any character to start

Стивестронг
Пн 30 января 2017 г., 7:25 утра
Если та же карта в одном и том же адаптере работает в одном случае и не работает в другом случае, то это кажется проблемой программного обеспечения во втором случае.
Дважды проверить часть инициализации, создайте различие между этими двумя случаями.

Булест
Пн 30 января 2017 г., 17:18
victor_pv написал:Убедитесь, что используемый вами модуль SDCARD не имеет преобразователей уровня. Если вы использовали его с досками Arduino, это, скорее всего, имеет конвертеры ровных.

victor_pv
Пн 30 января 2017 г. 18:08
Булесте написала:victor_pv написал:Убедитесь, что используемый вами модуль SDCARD не имеет преобразователей уровня. Если вы использовали его с досками Arduino, это, скорее всего, имеет конвертеры ровных.

Булест
Пн 30 января 2017 г., 19:33
Я знаю, что Maple Mini работает в 3.3V Но у меня есть читатели SDCARD на моем Maple Mini, оснащенном PIN VIN, давая им 5 В, поэтому они должны работать нормально.


Хорошо. После полного удаления я получаю следующее при использовании примера SDINFO, поэтому SDFAT работает с моей SD -картой и читателем. Теперь мне просто нужно выяснить, почему это ненавидит меня в коде. SdFat version: 20150321 Assuming the SD is the only SPI device. Edit DISABLE_CHIP_SELECT to disable another device. Assuming the SD chip select pin is: 8 Edit SD_CHIP_SELECT to change the SD chip select pin. type any character to start init time: 0 ms Card type: SDHC Manufacturer ID: 0X1B OEM ID: SM Product: 00000 Version: 1.0 Serial number: 0X3F359301 Manufacturing date: 3/2011 cardSize: 8064.60 MB (MB = 1,000,000 bytes) flashEraseSize: 128 blocks eraseSingleBlock: true OCR: 0XC0FF8000 SD Partition Table part,boot,type,start,length 1,0X0,0XC,8192,15742976 2,0X0,0X0,0,0 3,0X0,0X0,0,0 4,0X0,0X0,0,0 Volume is FAT32 blocksPerCluster: 64 clusterCount: 245856 freeClusters: 186105 freeSpace: 6098.29 MB (MB = 1,000,000 bytes) fatStartBlock: 12542 fatCount: 2 blocksPerFat: 1921 rootDirStart: 2 dataStartBlock: 16384 type any character to start

Rogerclark
Пн 30 января 2017 г. 20:49
Если вы включите адаптер SD из 5V и имел константеры ровного, вы должны проверить, что он не конвертирует MISO из 3.3V назад к уровням сигнала 5V.

Некоторые булавки на STM32 - это 5 В, но я не знаю, является ли мисо одним из них.

ZMEMW16
Пн 30 января 2017 г. 20:53
Проблема в том, что данные & Линии управления, которые составляют 0 или 3v3 от STM32 до карты.
Конвертер уровня на печатной плате «Интерфейс» ожидает уровней Arduino 0 -> 5V преобразует сигнал 3V3 вниз
примерно на 1/2-2/3 равен маргинальному или, возможно, состоянию;
В частности, если он использует резисторы, не уверен, что это также верно для преобразователя уровня «реального IC/TR/FET»

Данные 3V3, возвращающиеся с карты через конвертер, довольно счастливо становятся 0->5 В; те, которые входы STM32 могут обрабатывать.
Как говорит Роджер, необходимо проверить (пост пересеченного времени)
hth
Стивен

Rogerclark
Пн 30 января 2017 г. 22:28
Стивен

Хороший вопрос о конвертере, возможно, пытаясь преобразовать 3.Логические сигналы 3V от STM32, как если бы они были 5 В.

Я предполагаю, что это будет зависеть от того, активен или пассивен.

В любом случае, использование адаптера SD с преобразователями уровня не является правильным способом подключения 3.3V логика до 3.Логика 3V и, вероятно, приведет к проблемам.

Булест
Вт 31 января 2017 г. 12:01
У кого -нибудь есть рекомендация для полезного читателя SDCARD?

Стивестронг
Вт 31 января 2017 г. 12:08
Вот: https: // www.aliexpress.com/item/2pcs-tf ... 31024.HTML

Булест
Вт 31 января 2017 г. 12:42
Стивестронг написал:Вот: https: // www.aliexpress.com/item/2pcs-tf ... 31024.HTML

ZMEMW16
Вт 31 января 2017 г. 14:25
Я следил за рекомендацией на форуме, это по моему заказу
http: // www.eBay.сопутствующий.Великобритания/ITM/191736124794? ... Ebidx%3ait

Это только 3V3, нет регулятора и имеет резисторы SMT, достаточно простой, чтобы потерять их или просто короткий замыкание, если это необходимо :)

за 0 фунтов стерлингов.60 на 2, я получил 2 лота

Получите это, пока еще не пробовали.

Стивен

Булест
Вт 31 января 2017 г. 15:08
В то же время, вот мое преобразование оригинального WavPlayer победителей, но для ILI9341. К сожалению, сборка в SD -карте имеет те же проблемы, поэтому вы не можете использовать ее с этой программой, насколько я могу судить.
COOS_WAV_PLAYER_SETMODULE2_ILI9341.молния
(4.44 киб) скачано 29 раз

Стивестронг
Вторник 31 января 2017 г. 15:18
@Buleste,
Позвольте мне сделать вывод: ваша SD -карта и адаптер работают нормально, используя демонстрационную эскиз SD, но не работая с вашим программным обеспечением, верно?

Ваше программное обеспечение, которое вы опубликовали?
Если да, то это потенциальная проблема, что нет SetModule () перед инициализацией SD -карты с помощью SD.начинать(...).
Кроме того, вы используете оба порта SPI, но только один порт SPI - для дисплея - инициализируется в функции setup (). Один, используемый SD -картой (SPI 1), по -видимому, инициализируется в другом месте, неопределенное время. Я бы предложил инициировать карту также в настройке (). Для тестирования вы можете использовать пример информации SD -карты, которая работает в автономной версии в setup () тоже.

В качестве альтернативы, вы можете попытаться сопоставить дисплей с SPI 1 и SD -карту с SPI 2 без необходимости использовать функцию SetModule (). Для этого используйте последнюю бета -версию SDFAT от Greiman, потому что она может быть настроена на использование SPI_2. Я использую его версию прямо из GitHub, и она работает: SdFat sd(2); // use SPI 2 to access SD card

Булест
Вторник 31 января 2017 г. 16:00
Стивестронг написал:@Buleste,
Позвольте мне сделать вывод: ваша SD -карта и адаптер работают нормально, используя демонстрационную эскиз SD, но не работая с вашим программным обеспечением, верно?

Ваше программное обеспечение, которое вы опубликовали?
Если да, то это потенциальная проблема, что нет SetModule () перед инициализацией SD -карты с помощью SD.начинать(...).
Кроме того, вы используете оба порта SPI, но только один порт SPI - для дисплея - инициализируется в функции setup (). Один, используемый SD -картой (SPI 1), по -видимому, инициализируется в другом месте, неопределенное время. Я бы предложил инициировать карту также в настройке (). Для тестирования вы можете использовать пример информации SD -карты, которая работает в автономной версии в setup () тоже.

В качестве альтернативы, вы можете попытаться сопоставить дисплей с SPI 1 и SD -карту с SPI 2 без необходимости использовать функцию SetModule (). Для этого используйте последнюю бета -версию SDFAT от Greiman, потому что она может быть настроена на использование SPI_2. Я использую его версию прямо из GitHub, и она работает: SdFat sd(2); // use SPI 2 to access SD card

victor_pv
Вторник 31 января 2017 г. 16:31
Извините, я полностью забыл об этом примере, используя 2 порта SPI.

То, как приведен пример, должен использовать SPI1 для карты и SPI2 для экрана: ... SPI.setModule(2); tft.begin(); ...

victor_pv
Вт 31 января 2017 г. 16:36
Стивестронг написал:@Buleste,
Позвольте мне сделать вывод: ваша SD -карта и адаптер работают нормально, используя демонстрационную эскиз SD, но не работая с вашим программным обеспечением, верно?

Ваше программное обеспечение, которое вы опубликовали?
Если да, то это потенциальная проблема, что нет SetModule () перед инициализацией SD -карты с помощью SD.начинать(...).
Кроме того, вы используете оба порта SPI, но только один порт SPI - для дисплея - инициализируется в функции setup (). Один, используемый SD -картой (SPI 1), по -видимому, инициализируется в другом месте, неопределенное время. Я бы предложил инициировать карту также в настройке (). Для тестирования вы можете использовать пример информации SD -карты, которая работает в автономной версии в setup () тоже.

В качестве альтернативы, вы можете попытаться сопоставить дисплей с SPI 1 и SD -карту с SPI 2 без необходимости использовать функцию SetModule (). Для этого используйте последнюю бета -версию SDFAT от Greiman, потому что она может быть настроена на использование SPI_2. Я использую его версию прямо из GitHub, и она работает: SdFat sd(2); // use SPI 2 to access SD card

Булест
Вт 31 января 2017 г. 16:45
Как это случилось, я только что убил свой Maple Mini, так что все в любом случае придерживаются все в порядке. Ржу не могу

Однако, даже если у меня нет доски для тестирования, я буду вестись с попытками преобразовать звонки библиотеки Timeron.

РЕДАКТИРОВАТЬ:

Для тех, кто интересуется кодами, которые я пытаюсь перевести из программ Arduino в SMT32, являются следующими
Mapletape, который я уже начал менять, так что это работает на Maple Mini и компилируется, но из -за SD, и теперь Mini Проблемы пока не работают, начиная с.
https: // mega.NZ/#!vvnldtwt!RO5DBQHEGDFV ... EW9TCO7SHO

Casmaple я еще не изменился и все еще в своей рабочей форме Arduino
https: // mega.NZ/#!Bukhbczb!lvnoblqaip1a ... YK47NXUS2W

Tzxmaple - это та же история, что и Casmaple, но потому что код настолько похож, если я получаю один из них, а другой тоже должен работать.
https: // mega.NZ/#!6MD1HTDI!5rk7c6fwwchg ... diojgydb0e

victor_pv
Вторник 31 января 2017 г., 17:24
Булесте написала:Как это случилось, я только что убил свой Maple Mini, так что все в любом случае придерживаются все в порядке. Ржу не могу

Однако, даже если у меня нет доски для тестирования, я буду вестись с попытками преобразовать звонки библиотеки Timeron.

Булест
Вторник 31 января 2017 г., 17:33
victor_pv написал:Что такое библиотека Timerone для? Я не использовал его раньше.
Примечание совета, работая над моим портом библиотеки TMRPCM, я обнаружил, что Hardwaretimer предоставляет только самые основные особенности таймеров, но есть некоторые основные функции, которые могут выполнять больше, а затем все регистры и биты определены в сердечнике. Поэтому для чего -либо продвинутого, кроме генерации вывода ШИМ и запуска прерывания, вам следует пойти и хорошо прочитать на справочном руководстве STM32F1 и узнать, как работают периферийные устройства таймера, тогда вы можете пойти на установку регистров по мере необходимости.

Кстати, есть нить, которая называется что -то вроде «My Maple Mini, просто отпустите волшебный дым», которая показывает некоторые проблемы с аппаратным обеспечением, а некоторые можно исправить. Я начал это, когда думал, что сжигал MCU, и обнаружил, что это был только регулятор напряжения и диод, и смог их заменить.

victor_pv
Вт 31 января 2017 г., 19:58
Булесте написала: Таймер первый похож на Hardwaretimer для Maple Mini.

Лучший пример того, что он делает, можно найти здесь http: // Playground.Ардуино.cc/code/timer1 Несмотря на то, что мы используем модифицированную библиотеку Timerone Пола Стоффера, которая быстрее и работает на большем количестве досок.

Мы используем его, чтобы помочь генерировать звуковые импульсы, необходимые для преобразования файлов TZX/Tap/CAS в шум, которые компьютеры могут обнаружить.

victor_pv
Ср. 01 февраля 2017 г. 3:57 утра
Это более ранняя версия эскиза, он не использует SET MODULE, вместо этого он использует SPI1 для SDCARD, а SPI2 - новый объект класса SPI, объявленный в файле TFT CPP SPIClass tftSPI(2);

Беннебой
Ср. 01 февраля 2017 г. 7:45 утра
victor_pv написал:Булесте написала: Мы используем его, чтобы помочь генерировать звуковые импульсы, необходимые для преобразования файлов TZX/Tap/CAS в шум, которые компьютеры могут обнаружить.

Булест
Ср. 01 февраля 2017 г. 11:31
victor_pv написал:Булесте написала: Таймер первый похож на Hardwaretimer для Maple Mini.

Лучший пример того, что он делает, можно найти здесь http: // Playground.Ардуино.cc/code/timer1 Несмотря на то, что мы используем модифицированную библиотеку Timerone Пола Стоффера, которая быстрее и работает на большем количестве досок.

Мы используем его, чтобы помочь генерировать звуковые импульсы, необходимые для преобразования файлов TZX/Tap/CAS в шум, которые компьютеры могут обнаружить.

Беннебой
Ср. 01 февраля 2017 г. 11:49
Булесте написала:Это на самом деле для формата файла TAP Spectrum, который на удивление отличается от формата файла TAP C64. Есть также несколько форматов файлов CAS для разных машин. Это веселый старый мир. Ржу не могу

Булест
Чт, 02 февраля 2017 г. 18:21
Мне удалось получить компиляцию бота Tzxmaple и Casmaple. Мне пришлось // извлечь некоторые линии EEPROM на данный момент, пока я их выяснил, но я еще не могу проверить, чтобы увидеть, работает ли это, как следует. Спешите Aliexpress.

victor_pv
Пт, 03 февраля 2017 г., 4:16
Булесте написала:Мне удалось получить компиляцию бота Tzxmaple и Casmaple. Мне пришлось // извлечь некоторые линии EEPROM на данный момент, пока я их выяснил, но я еще не могу проверить, чтобы увидеть, работает ли это, как следует. Спешите Aliexpress.

Булест
Пт, 03 февраля 2017 г., 11:21
victor_pv написал:Булесте написала:Мне удалось получить компиляцию бота Tzxmaple и Casmaple. Мне пришлось // извлечь некоторые линии EEPROM на данный момент, пока я их выяснил, но я еще не могу проверить, чтобы увидеть, работает ли это, как следует. Спешите Aliexpress.

Беннебой
Пт, 03 февраля 2017 г. 11:25
Разве ты не можешь написать в SD? (Не выдерживая проблемы смены уровня на вашем существующем читателе, но я имею в виду альтернативу необходимости включать физический eEPROM)

Булест
Сб 04 февраля 2017 г. 10:42
Bennehboy ​​написал:Разве ты не можешь написать в SD? (Не выдерживая проблемы смены уровня на вашем существующем читателе, но я имею в виду альтернативу необходимости включать физический eEPROM)

Беннебой
Сб 04 февраля 2017 г. 11:15 утра
Булесте написала: Нет причин, почему я не могу.
Хорошая идея.
Вот почему мне нужно, чтобы другие люди думали для меня. Я так застрял по -своему, я не вижу других возможностей.

Булест
Чт 16 февраля 2017 г. 15:40
Гумб. New Maple Mini прибыл сегодня, и мне удалось загрузить загрузчик 2.0 к нему, но когда я подключаю его к USB, я не получаю COM -порт в диспетчере устройств, поэтому я не могу его программировать. Время выяснить, что с этим не так.

Стивестронг
Чт 16 февраля 2017 г. 16:02
Вам не нужен порт COM, чтобы прошить его. Загрузчик обнаружит порт USB DFU и запрограммирует чип.
COM -порт появляется после того, как первая программа была вспыхнута, так что серийный USB активен.

Булест
Чт 16 февраля 2017 г. 16:50
Стивестронг написал:Вам не нужен порт COM, чтобы прошить его. Загрузчик обнаружит порт USB DFU и запрограммирует чип.
COM -порт появляется после того, как первая программа была вспыхнута, так что серийный USB активен.

Булест
Ср. 01, 2017, 14:21
Наконец, мои новые читатели SD -карты здесь, а SD -карты обнаруживаются и т. Д.

К сожалению, похоже, что мои изменения в коде моих проектов не сработали, и я еще не смог заставить игрока WAV играть WAVS, но пора взломать.

Беннебой
Ср. 01, 2017, 16:44
Ваш код на GitHub?

Булест
Ср. 01, 2017, 17:20
К сожалению, нет. Mapletape, которая использует библиотеку TMRPCM от Victor, играет искаженную звук, который является началом.

Tzxmaple и Casmaple не играют ни одного звука, и я думаю, что это связано с таймером. Код Arduino использовал библиотеку Timer1, и я попытался изменить функции на библиотеку Hardwaretimer, и они просто не такие.

Mapletape Zip https: // mega.NZ/#!vvnldtwt!RO5DBQHEGDFV ... EW9TCO7SHO
Casmaple Zip (играет MSX .Файлы CAS) https: // mega.NZ/#!Bukhbczb!lvnoblqaip1a ... YK47NXUS2W
TZXMAPLE ZIP (воспроизводит ZX Spectrum TRZ/TAP FILES) https: // mega.NZ/#!6MD1HTDI!5rk7c6fwwchg ... diojgydb0e

Я также преобразовал COOS WAV Player SetModule2, чтобы работать с ILI9341, изменяя только код TFT, но, похоже, он не может искать .WAV -файлы на SD -карте, как это было в оригинале, хотя я на самом деле не связывался с этой частью кодирования.

victor_pv
Ср. 01 марта 2017 г., 17:53
Булесте написала:К сожалению, нет. Mapletape, которая использует библиотеку TMRPCM от Victor, играет искаженную звук, который является началом.

Tzxmaple и Casmaple не играют ни одного звука, и я думаю, что это связано с таймером. Код Arduino использовал библиотеку Timer1, и я попытался изменить функции на библиотеку Hardwaretimer, и они просто не такие.

Mapletape Zip https: // mega.NZ/#!vvnldtwt!RO5DBQHEGDFV ... EW9TCO7SHO
Casmaple Zip (играет MSX .Файлы CAS) https: // mega.NZ/#!Bukhbczb!lvnoblqaip1a ... YK47NXUS2W
TZXMAPLE ZIP (воспроизводит ZX Spectrum TRZ/TAP FILES) https: // mega.NZ/#!6MD1HTDI!5rk7c6fwwchg ... diojgydb0e

Я также преобразовал COOS WAV Player SetModule2, чтобы работать с ILI9341, изменяя только код TFT, но, похоже, он не может искать .WAV -файлы на SD -карте, как это было в оригинале, хотя я на самом деле не связывался с этой частью кодирования.

Булест
Ср. 01, 2017, 19:02
Спасибо, Виктор
Хорошо изменилось на следующее. if(TMRpcm_sample_RATE > 48000 ){ TMRpcm_sample_RATE = 48000; #if defined (debug) Serial.print("TMRpcm_sample RATE TOO HIGH: "); Serial.println(TMRpcm_sample_RATE); #endif } if(TMRpcm_sample_RATE == 48000 ){ resolution = 260; //250 repetition = 5; } else if(TMRpcm_sample_RATE == 44100 ){ resolution = 285; //272 repetition = 5; } else if(TMRpcm_sample_RATE == 22050 ){ resolution = 285; //272 repetition = 11; } else if(TMRpcm_sample_RATE == 8000 ){ resolution = 260; //250 repetition = 35; } else { resolution = 72000000/TMRpcm_sample_RATE; repetition = resolution/256; resolution = resolution/repetition; repetition = repetition-1; }

victor_pv
Ср. 01, 2017, 19:37
Булесте написала:Спасибо, Виктор
Хорошо изменилось на следующее. if(TMRpcm_sample_RATE > 48000 ){ TMRpcm_sample_RATE = 48000; #if defined (debug) Serial.print("TMRpcm_sample RATE TOO HIGH: "); Serial.println(TMRpcm_sample_RATE); #endif } if(TMRpcm_sample_RATE == 48000 ){ resolution = 260; //250 repetition = 5; } else if(TMRpcm_sample_RATE == 44100 ){ resolution = 285; //272 repetition = 5; } else if(TMRpcm_sample_RATE == 22050 ){ resolution = 285; //272 repetition = 11; } else if(TMRpcm_sample_RATE == 8000 ){ resolution = 260; //250 repetition = 35; } else { resolution = 72000000/TMRpcm_sample_RATE; repetition = resolution/256; resolution = resolution/repetition; repetition = repetition-1; }

Булест
Ср. 01, 2017 11:05
Я думаю, что знаю, где моя проблема с Mapletape, я положил буфер нагрузки в глупое место, и он просто играет в первую половину до секунды WAV, прежде чем вернуться к началу.

victor_pv
Чт, 02, 2017 12:32
Булесте написала:Я думаю, что знаю, где моя проблема с Mapletape, я положил буфер нагрузки в глупое место, и он просто играет в первую половину до секунды WAV, прежде чем вернуться к началу.

Булест
Чт, 02, 2017 10:57 утра
Спасибо, Виктор.

Это, кажется, сделало свое дело.

Все еще некоторые ошибки (не останавливаются в конце файла), но он играет .WAV -файлы. Теперь, чтобы посмотреть, узнают ли их компьютеры.

victor_pv
Чт, 02, 2017, 14:47
Булесте написала:Спасибо, Виктор.

Это, кажется, сделало свое дело.

Все еще некоторые ошибки (не останавливаются в конце файла), но он играет .WAV -файлы. Теперь, чтобы посмотреть, узнают ли их компьютеры.

Булест
Чт, 02, 2017, 14:56
victor_pv написал: :) У меня будет еще один взгляд, когда у меня будет время, у меня может быть больше ошибок здесь и там. Я не использовал его, кроме как тестировать его, сыграли несколько файлов, и не собирался так оставлять, но заканчивайте, очистите код и т. Д. Как я делаю исправления здесь и там, я дам вам знать или что -нибудь актуальное, и снова загрузим его в GitHub, когда он более или менее чистый. Я планировал использовать DMA для загрузки таймеров, которые будут использовать процессовое использование и удалить все прерывания, которые случаются сейчас, чтобы загрузить циклы ШИМ.

victor_pv
Чт, 02, 2017 18:24
Булесте написала:victor_pv написал: :) У меня будет еще один взгляд, когда у меня будет время, у меня может быть больше ошибок здесь и там. Я не использовал его, кроме как тестировать его, сыграли несколько файлов, и не собирался так оставлять, но заканчивайте, очистите код и т. Д. Как я делаю исправления здесь и там, я дам вам знать или что -нибудь актуальное, и снова загрузим его в GitHub, когда он более или менее чистый. Я планировал использовать DMA для загрузки таймеров, которые будут использовать процессовое использование и удалить все прерывания, которые случаются сейчас, чтобы загрузить циклы ШИМ.

Булест
Сб 04 марта 2017 г. 16:16
О боже. Я сейчас заставил Касмапл работать. Не совсем уверен, как я это сделал, но я сделал. Мне придется попробовать Tzxmaple сейчас.

victor_pv
Пн, 06 марта 2017 г. 6:45 утра
Булесте написала:О боже. Я сейчас заставил Касмапл работать. Не совсем уверен, как я это сделал, но я сделал. Мне придется попробовать Tzxmaple сейчас.

Rogerclark
Пн, 06 марта 2017 г. 9:05 утра
Спасибо

Булест
Пн, 06 марта 2017 г., 20:25
Кто -нибудь хорошо с SDFAT.час?

Раньше я использовал EEPROM на Arduino для хранения настройки, но, очевидно, не совсем практично на Mini, поэтому вместо того, чтобы писать настройку в EEPROM, я хочу написать его в файл на SDCARD.
Я могу доставить настройку записи в файл, но каждый раз, когда настройка изменяется, он добавляет другую строку в файл, тогда как я бы предпочел его перезаписать. Тогда я изо всех сил пытаюсь прочитать файл и установить его как целое число.

НАПРИМЕР
Есть выбор Baudrate 1200, 2400, 3600. Как только вы выберете, это сэкономит 1200 2400 3600 для файла на SD -карте. Когда плата включена, я хочу прочитать этот файл, и для того, чтобы Baudrate сравнивал то, что она только что прочитала.

Отличная работа над библиотекой победитель.

Я думаю, что еще одна ошибка, я обнаружил, что, когда он достигнет конца файла wav, tmrpcm не останавливается

victor_pv
Вт
Булесте написала:
Я думаю, что еще одна ошибка, я обнаружил, что, когда он достигнет конца файла wav, tmrpcm не останавливается

Булест
Вт, март 07, 2017, 9:30
victor_pv написал:Булесте написала:
Я думаю, что еще одна ошибка, я обнаружил, что, когда он достигнет конца файла wav, tmrpcm не останавливается

victor_pv
Вт
Булесте написала:Все файлы, которые я пробовал. 8-битный 16-битный моно и стерео. Кажется, кажется, играет тишину. Это вполне может быть мой код.

Булест
Вт
Я работаю в петле, так как это, кажется, единственное место, где он действительно будет работать.
// --------------------------------------------------------------------------------- // DO NOT USE CLASS-10 CARDS on this project - they're too fast to operate using SPI // --------------------------------------------------------------------------------- // ArduiTape Arduino based 8-bit computer tape player. // Play WAV files from an SD card. Based on the TMRpcm code. //#include #include #include #include #include LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display //TMRpcm tmrpcm; //Initialise tmrpcm SdFat SD; //Initialise Sd card SdFile entry; #define filenameLength 100 char fileName[filenameLength+1]; //Current filename char sfileName[13]; const int SD_ChipSelectPin = 8; //Sd card chip select pin // --------------------------------------------------------------------------------- //int cardType = SPI_CLOCK_DIV2; // --------------------------------------------------------------------------------- #define btnPlay 20 //Play Button #define btnStop 19 //Stop Button #define btnUp 18 //Menu Up button #define btnDown 17 //Menu Down button #define btnMotor 21 //Motor Sense (connect pin to gnd to play, NC for pause) #define btnMselect 22 //Motor Control on/off button #define scrollSpeed 250 //text scroll delay #define scrollWait 3000 //Delay before scrolling starts byte scrollPos=0; unsigned long scrollTime=millis()+scrollWait; int mselectState = 1;//Motor control state 1=on 0=off int wasPlaying = 0; //Was there a file playing? int motorState = 1; //Current motor control state int finished = 0; //Has the file finished? int start = 0; //Currently playing flag int pauseOn = 0; //Pause state int currentFile = 1; //Current position in directory int maxFile = 0; //Total number of files in directory int isDir = 0; //Is the current file a directory unsigned long timeDiff = 0; //button debounce void setup() { lcd.init(); //Initialise LCD (16x2 type) lcd.backlight(); pinMode(SD_ChipSelectPin, OUTPUT); //Setup SD card chipselect pin SPI.setModule(1); if (!SD.begin(SD_ChipSelectPin,SPI_CLOCK_DIV2)) { //Start SD card and check it's working lcd_clearline(0); lcd.print("No SD Card"); return; } SD.chdir(); //set SD to root directory speakerPin = 27; //TMR1 CH1 speakerPin2 = 26; //TMR1 CH2 pinMode(btnPlay,INPUT_PULLUP); digitalWrite(btnPlay,HIGH); pinMode(btnStop,INPUT_PULLUP); digitalWrite(btnStop,HIGH); pinMode(btnUp,INPUT_PULLUP); digitalWrite(btnUp,HIGH); pinMode(btnDown,INPUT_PULLUP); digitalWrite(btnDown,HIGH); pinMode(btnMotor, INPUT_PULLUP); digitalWrite(btnMotor,HIGH); pinMode(btnMselect, INPUT_PULLUP); digitalWrite(btnMselect, HIGH);//Setup buttons with internal pullup lcd.clear(); lcd.print("MapleTape 0.2a"); delay(1000); lcd.clear(); getMaxFile(); //get the total number of files in the directory seekFile(currentFile); //move to the first file in the directory lcd_clearline(0); lcd.print("Ready.."); } void loop(void) { if (TMRpcm_playing) { TMRpcm_buffer_load(); } if(!TMRpcm_playing && wasPlaying == 1) { stopFile(); //Serial.println("Stopped"); //if the file has finished stop trying to play the file } if((millis()>=scrollTime) && start==0 && (strlen(fileName)>16)) { scrollTime = millis()+scrollSpeed; scrollText(fileName); scrollPos +=1; if(scrollPos>strlen(fileName)) { scrollPos=0; scrollTime=millis()+scrollWait; scrollText(fileName); } } motorState=digitalRead(btnMotor); if (millis() - timeDiff > 50) { // check switch every 100ms timeDiff = millis(); // get current millisecond count if(digitalRead(btnPlay) == LOW) { if(start==0) { playFile(); delay(200); } else { while(digitalRead(btnPlay)==LOW) { delay(50); } TMRpcm_pause(); if (pauseOn == 0) { lcd_clearline(0); lcd.print("Paused"); pauseOn = 1; } else { lcd_clearline(0); lcd.print("Playing"); pauseOn = 0; } } } if(digitalRead(btnMselect)==LOW){ if(mselectState==0) { lcd_clearline(0); lcd.print("Motor CTRL On"); mselectState=1; } else { lcd_clearline(0); lcd.print("Motor CTRL Off"); mselectState=0; } while(digitalRead(btnMselect)==LOW) { delay(50); } } if(digitalRead(btnStop)==LOW && start==1) { stopFile(); delay(200); } else { if (digitalRead(btnStop)==LOW && start==0){ //Return to root of the SD card. SD.chdir(true); getMaxFile(); currentFile=1; seekFile(currentFile); while(digitalRead(btnStop)==LOW) { //prevent button repeats by waiting until the button is released. delay(50); } } } if(digitalRead(btnUp)==LOW && start==0) { upFile(); while(digitalRead(btnUp)==LOW) { delay(50); //wait until button is released } } if(digitalRead(btnDown)==LOW && start==0) { downFile(); while(digitalRead(btnDown)==LOW) { delay(50); } } if(mselectState==1 && start==1) { //if file is playing and motor control is on then handle current motor state if(motorState==1 && pauseOn==0) { TMRpcm_pause(); lcd_clearline(0); lcd.print("Paused"); pauseOn = 1; } if(motorState==0 && pauseOn==1) { TMRpcm_pause(); lcd_clearline(0); lcd.print("Playing"); pauseOn = 0; } } } } void upFile() { //move up a file in the directory currentFile--; if(currentFile<1) { getMaxFile(); currentFile = maxFile; } seekFile(currentFile); } void downFile() { //move down a file in the directory currentFile++; if(currentFile>maxFile) { currentFile=1; } seekFile(currentFile); } void seekFile(int pos) { //move to a set position in the directory, store the filename, and display the name on screen. entry.cwd()->rewind(); for(int i=1;i<=currentFile;i++) { entry.openNext(entry.cwd(),O_READ); entry.getName(fileName,filenameLength); entry.getSFN(sfileName); if(entry.isDir() || !strcmp(sfileName, "ROOT")) { isDir=1; } else { isDir=0; } entry.close(); } lcd_clearline(1); scrollPos=0; scrollText(fileName); } void stopFile() { TMRpcm_stopPlayback(); if(start==1){ lcd_clearline(0); lcd.print("Stopped"); start=0; } } void playFile() { if(isDir==1) { changeDir(); } else { if(entry.cwd()->exists(sfileName)) { lcd_clearline(0); lcd.print("Playing"); lcd_clearline(1); scrollPos=0; scrollText(fileName); TMRpcm_play(sfileName); wasPlaying = 1; start=1; TMRpcm_pause(); lcd_clearline(0); lcd.print("Paused"); pauseOn = 1; } else { lcd_clearline(1); lcd.print("No File Selected"); } } } void getMaxFile() { //gets the total files in the current directory and stores the number in maxFile entry.cwd()->rewind(); maxFile=0; while(entry.openNext(entry.cwd(),O_READ)) { entry.getName(fileName,filenameLength); entry.close(); maxFile++; } entry.cwd()->rewind(); } void lcd_clearline(int l) { //clear a single line on the LCD lcd.setCursor(0,l); lcd.print(" "); lcd.setCursor(0,l); } void changeDir() { //change directory, if fileName="ROOT" then return to the root directory //SDFat has no easy way to move up a directory, so returning to root is the easiest way. //each directory (except the root) must have a file called ROOT (no extension) if(!strcmp(fileName, "ROOT")) { SD.chdir(true); } else { SD.chdir(fileName, true); } getMaxFile(); currentFile=1; seekFile(currentFile); } void scrollText(char* text) { if(scrollPos<0) scrollPos=0; char outtext[16]; for(int i=0;i<16;i++) { int p=i+scrollPos; if(p

Булест
Сб 11 марта 2017 г. 15:52
Новая проблема. Ниже приведены две части кода, которые делают одно и то же, и оба работают на Arduino Nano. Первый не будет компилировать на Maple Mini из -за слова слова. Второй будет компилировать, но не делает то, что делает тот же кусок кода на Arduino Nano.

Это длинное время, что я смогу получить помощь, не показывая весь код для контекста или длительного объяснения того, что делает код, но я подумал, что попробую.
int ReadWord(unsigned long pos) { //Read 2 bytes from the file, and move file position on two if successful byte out[2]; int i=0; if(entry.seekSet(pos)) { i = entry.read(out,2); if(i==2) bytesRead += 2; } outWord = word(out[1],out[0]); return i; } int ReadLong(unsigned long pos) { //Read 3 bytes from the file, and move file position on three if successful byte out[3]; int i=0; if(entry.seekSet(pos)) { i = entry.read(out,3); if(i==3) bytesRead += 3; } outLong = (word(out[2],out[1]) << 8) | out[0]; return i; } int ReadDword(unsigned long pos) { //Read 4 bytes from the file, and move file position on four if successful byte out[4]; int i=0; if(entry.seekSet(pos)) { i = entry.read(out,4); if(i==4) bytesRead += 4; } outLong = (word(out[3],out[2]) << 16) | word(out[1],out[0]); return i; }

Булест
Сб 11 марта 2017 г., 19:55
Неважно. Проблема была не в том коде, который он сталкивается с таймерами.

Булест
Чт 16 марта 2017 г. 12:38
Новая и разочаровывающая проблема.

Maple Mini слишком быстро обрабатывает микросекунд.

Предполагается, что он произведет первоначальный импульс 619 микросекунд и производит один из чуть более 500.

К сожалению, с временем кода TZXMAPLE действительно все, и он, кажется, слишком быстро работает. Как ни странно, хотя длина файла, в котором он играет, верна, но длина волны импульсов слишком короткая. Та же самая обработка работает совершенно хорошо сейчас на Nano.
Tzxmaple_v0.1A.молния
(9.42 киб) скачано 16 раз

victor_pv
Чт 16 марта 2017 г., 19:13
Булесте написала:Новая и разочаровывающая проблема.

Maple Mini слишком быстро обрабатывает микросекунд.

Предполагается, что он произведет первоначальный импульс 619 микросекунд и производит один из чуть более 500.

К сожалению, с временем кода TZXMAPLE действительно все, и он, кажется, слишком быстро работает. Как ни странно, хотя длина файла, в котором он играет, верна, но длина волны импульсов слишком короткая. Та же самая обработка работает совершенно хорошо сейчас на Nano.

Tzxmaple_v0.1A.молния

Булест
Пт 17 марта 2017 г. 10:22
victor_pv написал:Можете ли вы опубликовать, какой раздел кода должен генерировать этот пульс?