Pages: [1]   Go Down
Author Topic: Strange behavior using TVout  (Read 313 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

First time posting, so please be patient...

I want to use the TVout library to display some data captured through an electret mic, and do an fft later.
After some troubleshooting, I found an "unused" array causes TVout not to display anything.
I'm using the UNO and the working code is below (displays some pixels dancing on the screen).
If I uncomment the wtf line, nothing ever gets to the tv (not even what I send on setup()!!!).

Any ideas will be greatly appreciated, I'm stuck here. The wtf array would be used as imaginary part for the fft or fix_fft function later on.

Code:
#include <TVout.h>
#include <fontALL.h>
#include <fix_fft.h>

TVout TV;
const int SCR_HEI = 96;
const int SCR_WID = 120;
const int size = 128;
char data[size];
char oldData[size];
char wtf[size];
char oldHistogram[size];
const int AN_PIN = 0;

void setup() {
  TV.begin(NTSC, SCR_WID, SCR_HEI);
  TV.select_font(font6x8);
  TV.println("luigi");
  delay(3000);
  for (int i=0; i< size;i++) {
    oldHistogram[i] = 0;
    oldData[i] = 0;
  }
}

void loop() {
  int i = 0;
  int j,k = 0;
  static long tt;
  int val;
  i = 0;
  // ANALOG PIN READING + PLOTTING THE WAVE
  while (i < size) {
    if (micros() > tt + 100) {
      val = analogRead(AN_PIN);
      data[i] = val / 4 - 128;
      if (i > 0 && i <= SCR_WID) {
        int valorYs1 = map(data[i-1], -128, 128, 0, SCR_HEI);
        int valorYs0 = map(data[i], -128, 128, 0, SCR_HEI);
        // clears line from last loop, draws new line and stores data for next loop
        TV.draw_line(i-1, oldData[i-1], i, oldData[i], 0);
        TV.draw_line(i-1, valorYs1, i, valorYs0, 1);
        oldData[i-1] = valorYs1;
      }
//      wtf[i] = 0;
      i++;
      tt = micros();
    }
  }
}

Logged

Massachusetts, USA
Offline Offline
Tesla Member
***
Karma: 180
Posts: 8103
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I would suspect that you run out of RAM.  I'm surprised it only fails when there is code to set the contents of wtf[].  Perhaps the compiler is smart enough that it doesn't allocate space for arrays that are never referenced.

Check the value returned by TVout.begin().  If you get 0 then you're fine.  If you get 4 it means there wasn't enough RAM available to allocate the screen buffer and you have to use a smaller width or height.
Logged

Send Bitcoin tips to: 1L3CTDoTgrXNA5WyF77uWqt4gUdye9mezN
Send Litecoin tips to : LVtpaq6JgJAZwvnVq3ftVeHafWkcpmuR1e

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Well I'll be damned! I didn't even realize TVout.begin returned something.

It is indeed returning 4, I guess I'll need some pruning on the code.

Any leads on how to estimate used memory? Or can we trust the size message after compiling (given all declared objects are used)?


Thanks a lot, this was really bugging me.
Logged

New Jersey
Offline Offline
Faraday Member
**
Karma: 50
Posts: 3429
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

The message at the end of compilation gives the size of your executable - the amount of flash memory it will consume. Your issue is with how much RAM you're using and there is far less of it available - only 2K on an UNO for example. Search the forums for freemem - there are a number of implementations of functions to tell you how much RAM remains.

Edit: typo
« Last Edit: September 07, 2011, 06:10:17 am by wildbill » Logged

Pages: [1]   Go Up
Jump to: