Jump to content


  • Content Count

  • Joined

  • Last visited

  • Days Won


Everything posted by zeke

  1. Welcome @Johnbills !!!
  2. zeke

    MSP430 Nixie Clock

    I have a zip file of @RobG's Nixie Clock V3. @RobG, I hope you are okay with me posting this? @bluehash, please delete this if there is a problem.
  3. @lacint, This is a difficult question to answer because the people who hang out here are MSP430 people and not PIC people. Have you considered asking your questions over at the Microchip forums?
  4. Nah, don't hire an Autocad engineer. There are plenty of people out here who can drive Altium. The special people are the ones who can drive Protel, Altium, Orcad, Pcad, or PADS. They are CAD agnostic. I have met a few of them over the years. I have been using Altium/Protel since the 1990's. It was the easiest program to drive back then and I had access through work. In my neck of the woods, there are a lot of people who use Altium. We have a local guy who is pretty well known as a contract Altium guy. It takes coaching to bring someone up the learning curve. If that person is excited about learning it then it becomes a happy task to climb the learning curve.
  5. I am considering buying something from banggood.com. Is this a good idea or am I taking a risk?
  6. A ridiculously long time ago, I took PACE solder training. At the time, someone said it was the training program that NASA employees had to take to be one of their solder jockies. I’m count it as one of the best investments that I ever made in my career. I think of soldering as one of my superpowers now.
  7. We have to unpack all that is going on in that get stack pointer statement. The function getstackpointer() returns a value. The (int*) transforms that into “the address of that return value” which will be 16 bits large. Then that 16 bit address is assigned to the multi stack variable. The author is asking us to modify the list of function names in the taskpnt function since (s)he doesn’t know what we will be doing. So that is up to us. So task1, task2, and so on, are functions that we write to do one specific thing. Something atomic, like SwitchOnLED(LED1) or SwitchGPIO(P1-7), etc. Does that make sense?
  8. Maybe I am thinking of the PetiteFS way of using an SD card but doesn't that SD card need to be first formatted on a PC and have a file created as well? Then, the MSP430 would access the SD card, open up the pre-existing file, and then write to it? I would verify the SD card on a PC first by formatting it then creating an empty text file on it. Then, get the MSP430 to see it then open it. Double check the wiring of the card. And make sure that you have a really good +5V power source for that SD card. I have read that they want a bunch of current to operate properly. And, I suspect the dev board cannot supply that much current on the +5V line. Gotta verify that too.
  9. First thing, the snippet you posted seems to be incomplete. I cannot see the closing parenthesis. Next, the code is initializing a data structure (called multistack) that will serve as The Stack. When this code runs, the author does several things with The Stack: Saves the SP register value (which is the present location/address of The Stack Pointer) Checks to make sure that there are no more than "tasks" numbers of tasks. Initializes the index of The Stack so it knows where it is in The Stack Stores a task pointer into the stack (he calls it the PC - probably Program Counter) Stores the state of the GIE register (Global Interupt Enable register) Then makes space for 26 bytes of information in The Stack (he calls them 16 bit Words + 2 for wastage[see his post above]) This is the kind of operations that an operating system will do when it wants to stop doing one thing, switch context, and start doing another thing, complete that, then come back and continue doing what it was doing before the interruption. Does that make sense?
  10. @MadMayonnaise They are called Function Pointer Arrays. I love them. I have been using them extensively to create my CLI - Command Line Interpreter. I can add a new command just by defining a new entry into an array. They are an alternative to the Gigantic Switch Statement style of coding. To get you started, here is an article from 1999 by Nigel Jones: How to Create Jump Tables via Function Pointer Arrays in C and C++ I also found the book Programming Embedded Systems in C and C++ by Michael Barr to be exceptionally helpful. Chapter nine specifically.
  11. You are welcome @radcliffkaty1
  12. As mentioned in your other post, yes, it appears that the APA107 is a drop in replacement for the APA102 LED. APA107_RGB.pdf
  13. @pololu The communication scheme, the physical footprint, and the pinout all appear to be exactly like the APA102 so it looks like the APA107 is a drop in replacement. APA107_RGB.pdf
  14. @mph Thank you for sharing this with us. 👍
  15. zeke

    MSP430G2553 Workshop

    @Markers Excellent! I am glad that you found a solution! Yes, putting the msp430 into low power mode is a great way to complete the processing of the infinite while loop in main(). Is this what your main() function looks like now?
  16. zeke

    MSP430G2553 Workshop

    @Markers Excellent! I am glad that you found a solution! Yes, putting the msp430 into low power mode is a great way to complete the processing of the infinite while loop in main(). Is this what your main() function looks like now?
  17. zeke

    MSP430G2553 Workshop

    @Markers I have taken a quick look at your code and the first thing that I can see is the many function calls inside of the interrupt routines. They will upset the accuracy of your timers. Especially, that FlashLED() function call. Yikes! What you can do is use two flags to keep track of servicing that interrupt. The first flag will indicate the interrupt has fired eg: "T1_Fired". The second flag will tell the main while loop that it has or hasn't been serviced eg: "T1_Serviced". Inside the ISR, set the T1_Fired flag instead of making a function call. Then, in the main while loop, test for each of those flags. If that flag is set and it hasn't been serviced then call that function to react. For example: main { ... while(1) { if( (TRUE == T1_Fired) && (FALSE == T1_Serviced) ) { FlashLED(); T1_Serviced = TRUE; } if( (TRUE == P2_Fired) && (FALSE == P2_Serviced) ) { StartTimer_Or_Whatever(); P2_Serviced = TRUE; } ... } } Make sure to get the printf's out of the ISR's as well. They can crash your program if you exhaust the stack inside of the ISR. Again, use a flag to tell the main while loop to print out stuff. Does that help?
  18. @biza For us to help you, you have to provide a lot more information. What processor are you using? What programming environment are you using? What software tests have you performed? Can you show us some software that you are testing? What specific question(s) are you asking us?
  19. @Salibensuleiman Thank you for sharing your solution with us!
  20. My gut instinct would be to add an additional condition (a timer) to that while loop. I don't work with that processor so I am not sure of the implementation but here's my pseudo code: while ( (pcb != NULL) && (thisTimer <= ARBITRARY_MAX_WAIT_TIME) ) { ... } I don't know if that makes any sense to do it that way, but that is how I am thinking. Add in a second variable that *you* have control over. Then you can have a measure of sanity of something goes off the rails. YMMV
  21. Yeah, I built that. I was inspired by something similar a friend of mine created about ten years ago. I also found the book Programming Embedded Systems in C and C++ by Michael Barr to be exceptionally helpful. Chapter nine specifically. So, back when I discovered the loss of my marquee clock code, I went on a rampage to re-write the lost code. The first thing I did was figure out how to write a command line interface parser equal to or better than my friend's cli. Initially, for some reason, I wrote an AT command parser for the marquee clock. But, I found it to be unfriendly. So, I re-wrote it as a human friendly variant. I pulled that cli into this data logger when I decided to go on a sprint to develop this code. Now I am on a rampage learning how to program in PyQt5. I am hoping to have a proof of concept SCADA program. Hopefully, I will have something to demonstrate when I meet up with some friends at the end of the month.
  22. If anyone is curious, I have been developing the edge router app in pyqt5 on linux. Here is one of the better tutorials that I have found on learning PyQt5. Apparently, there are two different sources to get PyQt5 from: PyQt5 from Riverbank Computing, and Qt for Python from Qt.com, which was originally called PySide(2) PyQt5 is a bit of a mind bender at the start, but it gets better as you climb the learning curve.
  23. I have been working on the software for the edge router for my data logger. Here is a short video of the various help menus in the system. OneWireDatalogger-HelpScreens.mp4
  • Create New...