Jump to content

zeke

Members
  • Content Count

    1,777
  • Joined

  • Last visited

  • Days Won

    101

zeke last won the day on December 24 2018

zeke had the most liked content!

1 Follower

About zeke

  • Rank
    Electron Wrangler

Contact Methods

  • Website URL
    http://www.randomelectrons.com

Profile Information

  • Gender
    Not Telling
  • Location
    Calgary, Canada

Recent Profile Visitors

2,417 profile views
  1. 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.
  2. I am considering buying something from banggood.com. Is this a good idea or am I taking a risk?
  3. 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.
  4. 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?
  5. 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.
  6. 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?
  7. @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.
  8. You are welcome @radcliffkaty1
  9. As mentioned in your other post, yes, it appears that the APA107 is a drop in replacement for the APA102 LED. APA107_RGB.pdf
  10. @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
  11. @mph Thank you for sharing this with us. 👍
  12. 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?
  13. 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?
  14. 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?
  15. @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?
×
×
  • Create New...