ATtiny84 and Nokia 5110

Hi,

I'm trying to get an ATtiny84 to work with a Nokia 5110 display - both running at 3.3v - without any luck at all.

I'm using what I think is the latest arduino-tiny package (0100.0017.zip) but the display stays stubbornly blank.

I'm using a basic example ( Arduino Playground - PCD8544 ) which works perfectly in a standalone ATmega328.

I've used the Nokia display in a few projects so I know it's quirks (such as finicky contrast settings) so I'm at a bit of a loss.

I've configured the ATtiny84 as 8MHz and set the fuses with 'burn bootloader'. I've tested each digitalWrite pin individually with an LED and simple 'Blink' type programs work fine.

In the example above, I even re-wrote shiftOut using 8 separate blocks of code in case shiftOut or even '>>' wasn't being recognized:

  byte mask = B10000000;
  value = data & mask;
  digitalWrite(PIN_SDIN, value);
  digitalWrite(PIN_SCLK, HIGH);
  digitalWrite(PIN_SCLK, LOW);
  
  mask = B01000000;
  value = data & mask;
  digitalWrite(PIN_SDIN, value);
  digitalWrite(PIN_SCLK, HIGH);
  digitalWrite(PIN_SCLK, LOW);

etc, etc

Everything I try works in an ATmega328 but not the ATtiny84.

Any ideas where to look next would be appreciated.

Thanks,
John.

In my use of the Nokia display, the graphic to text ASCII array

static const byte ASCII[][5] =
{{0x00, 0x00, 0x00, 0x00, 0x00} // 20  
,{0x00, 0x00, 0x5f, 0x00, 0x00} // 21 !
,{0x00, 0x07, 0x00, 0x07, 0x00} // 22 "
,{0x14, 0x7f, 0x14, 0x7f, 0x14} // 23 #
,{0x24, 0x2a, 0x7f, 0x2a, 0x12} // 24 $
,{0x23, 0x13, 0x08, 0x64, 0x62} // 25 %
,{0x36, 0x49, 0x55, 0x22, 0x50} // 26 &
,{0x00, 0x05, 0x03, 0x00, 0x00} // 27 '
,{0x00, 0x1c, 0x22, 0x41, 0x00} // 28 (
,{0x00, 0x41, 0x22, 0x1c, 0x00} // 29 )
,{0x14, 0x08, 0x3e, 0x08, 0x14} // 2a *
,{0x08, 0x08, 0x3e, 0x08, 0x08} // 2b +
,{0x00, 0x50, 0x30, 0x00, 0x00} // 2c ,
,{0x08, 0x08, 0x08, 0x08, 0x08} // 2d -
,{0x00, 0x60, 0x60, 0x00, 0x00} // 2e .
,{0x20, 0x10, 0x08, 0x04, 0x02} // 2f /
,{0x3e, 0x51, 0x49, 0x45, 0x3e} // 30 0
,{0x00, 0x42, 0x7f, 0x40, 0x00} // 31 1
,{0x42, 0x61, 0x51, 0x49, 0x46} // 32 2
,{0x21, 0x41, 0x45, 0x4b, 0x31} // 33 3
,{0x18, 0x14, 0x12, 0x7f, 0x10} // 34 4
,{0x27, 0x45, 0x45, 0x45, 0x39} // 35 5
,{0x3c, 0x4a, 0x49, 0x49, 0x30} // 36 6
,{0x01, 0x71, 0x09, 0x05, 0x03} // 37 7
,{0x36, 0x49, 0x49, 0x49, 0x36} // 38 8
,{0x06, 0x49, 0x49, 0x29, 0x1e} // 39 9
,{0x00, 0x36, 0x36, 0x00, 0x00} // 3a :
,{0x00, 0x56, 0x36, 0x00, 0x00} // 3b ;
,{0x08, 0x14, 0x22, 0x41, 0x00} // 3c <
,{0x14, 0x14, 0x14, 0x14, 0x14} // 3d =
,{0x00, 0x41, 0x22, 0x14, 0x08} // 3e >
,{0x02, 0x01, 0x51, 0x09, 0x06} // 3f ?
,{0x32, 0x49, 0x79, 0x41, 0x3e} // 40 @
,{0x7e, 0x11, 0x11, 0x11, 0x7e} // 41 A
,{0x7f, 0x49, 0x49, 0x49, 0x36} // 42 B
,{0x3e, 0x41, 0x41, 0x41, 0x22} // 43 C
,{0x7f, 0x41, 0x41, 0x22, 0x1c} // 44 D
,{0x7f, 0x49, 0x49, 0x49, 0x41} // 45 E
,{0x7f, 0x09, 0x09, 0x09, 0x01} // 46 F
,{0x3e, 0x41, 0x49, 0x49, 0x7a} // 47 G
,{0x7f, 0x08, 0x08, 0x08, 0x7f} // 48 H
,{0x00, 0x41, 0x7f, 0x41, 0x00} // 49 I
,{0x20, 0x40, 0x41, 0x3f, 0x01} // 4a J
,{0x7f, 0x08, 0x14, 0x22, 0x41} // 4b K
,{0x7f, 0x40, 0x40, 0x40, 0x40} // 4c L
,{0x7f, 0x02, 0x0c, 0x02, 0x7f} // 4d M
,{0x7f, 0x04, 0x08, 0x10, 0x7f} // 4e N
,{0x3e, 0x41, 0x41, 0x41, 0x3e} // 4f O
,{0x7f, 0x09, 0x09, 0x09, 0x06} // 50 P
,{0x3e, 0x41, 0x51, 0x21, 0x5e} // 51 Q
,{0x7f, 0x09, 0x19, 0x29, 0x46} // 52 R
,{0x46, 0x49, 0x49, 0x49, 0x31} // 53 S
,{0x01, 0x01, 0x7f, 0x01, 0x01} // 54 T
,{0x3f, 0x40, 0x40, 0x40, 0x3f} // 55 U
,{0x1f, 0x20, 0x40, 0x20, 0x1f} // 56 V
,{0x3f, 0x40, 0x38, 0x40, 0x3f} // 57 W
,{0x63, 0x14, 0x08, 0x14, 0x63} // 58 X
,{0x07, 0x08, 0x70, 0x08, 0x07} // 59 Y
,{0x61, 0x51, 0x49, 0x45, 0x43} // 5a Z
,{0x00, 0x7f, 0x41, 0x41, 0x00} // 5b [
,{0x02, 0x04, 0x08, 0x10, 0x20} // 5c £¤
,{0x00, 0x41, 0x41, 0x7f, 0x00} // 5d ]
,{0x04, 0x02, 0x01, 0x02, 0x04} // 5e ^
,{0x40, 0x40, 0x40, 0x40, 0x40} // 5f _
,{0x00, 0x01, 0x02, 0x04, 0x00} // 60 `
,{0x20, 0x54, 0x54, 0x54, 0x78} // 61 a
,{0x7f, 0x48, 0x44, 0x44, 0x38} // 62 b
,{0x38, 0x44, 0x44, 0x44, 0x20} // 63 c
,{0x38, 0x44, 0x44, 0x48, 0x7f} // 64 d
,{0x38, 0x54, 0x54, 0x54, 0x18} // 65 e
,{0x08, 0x7e, 0x09, 0x01, 0x02} // 66 f
,{0x0c, 0x52, 0x52, 0x52, 0x3e} // 67 g
,{0x7f, 0x08, 0x04, 0x04, 0x78} // 68 h
,{0x00, 0x44, 0x7d, 0x40, 0x00} // 69 i
,{0x20, 0x40, 0x44, 0x3d, 0x00} // 6a j 
,{0x7f, 0x10, 0x28, 0x44, 0x00} // 6b k
,{0x00, 0x41, 0x7f, 0x40, 0x00} // 6c l
,{0x7c, 0x04, 0x18, 0x04, 0x78} // 6d m
,{0x7c, 0x08, 0x04, 0x04, 0x78} // 6e n
,{0x38, 0x44, 0x44, 0x44, 0x38} // 6f o
,{0x7c, 0x14, 0x14, 0x14, 0x08} // 70 p
,{0x08, 0x14, 0x14, 0x18, 0x7c} // 71 q
,{0x7c, 0x08, 0x04, 0x04, 0x08} // 72 r
,{0x48, 0x54, 0x54, 0x54, 0x20} // 73 s
,{0x04, 0x3f, 0x44, 0x40, 0x20} // 74 t
,{0x3c, 0x40, 0x40, 0x20, 0x7c} // 75 u
,{0x1c, 0x20, 0x40, 0x20, 0x1c} // 76 v
,{0x3c, 0x40, 0x30, 0x40, 0x3c} // 77 w
,{0x44, 0x28, 0x10, 0x28, 0x44} // 78 x
,{0x0c, 0x50, 0x50, 0x50, 0x3c} // 79 y
,{0x44, 0x64, 0x54, 0x4c, 0x44} // 7a z
,{0x00, 0x08, 0x36, 0x41, 0x00} // 7b {
,{0x00, 0x00, 0x7f, 0x00, 0x00} // 7c |
,{0x00, 0x41, 0x36, 0x08, 0x00} // 7d }
,{0x10, 0x08, 0x08, 0x10, 0x08} // 7e ¡û
,{0x78, 0x46, 0x41, 0x46, 0x78} // 7f ¡ú
};

consumes 94% of the available SRAM which is 512 Bytes in the tiny84. Of course, you can ‘par down’ the translation and since you did not post your application… Well, anyway, maybe it is a memory issue?

Ray

mrburnette:
In my use of the Nokia display, the graphic to text ASCII array

static const byte ASCII[][5] =

{{0x00, 0x00, 0x00, 0x00, 0x00} // 20 
,{0x00, 0x00, 0x5f, 0x00, 0x00} // 21 !
,{0x00, 0x07, 0x00, 0x07, 0x00} // 22 "
,{0x14, 0x7f, 0x14, 0x7f, 0x14} // 23 #
,{0x24, 0x2a, 0x7f, 0x2a, 0x12} // 24 $
,{0x23, 0x13, 0x08, 0x64, 0x62} // 25 %




consumes 94% of the available SRAM which is 512 Bytes in the tiny84. Of course, you can 'par down' the translation and since you did not post your application... Well, anyway, maybe it is a memory issue?

That's probably it, yes.

Whoever put that in RAM is an idiot. Even on a Mega328 it should be in PROGMEM.

I wondered if it was memory but the message during uploading is:

Binary sketch size: 1,778 bytes (of a 8,192 byte maximum)
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny84
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny84

The application is in the Arduino playground, here: http://playground.arduino.cc/Code/PCD8544#

The only other thing I can think of is 8MHz is too slow for the 5110 display?

John.

PAGEL and BS2

These are non-critucal warnings.

When you tested on the 328P, you did not run at 5V, by mistake? My understanding is the display hardware will work at 5V but the display "may" eventually degrade.

I have run the Nokia at 8MHz with no issues, using a 3.3V mini.

Ray

mrburnette:

PAGEL and BS2

These are non-critucal warnings.

When you tested on the 328P, you did not run at 5V, by mistake? My understanding is the display hardware will work at 5V but the display "may" eventually degrade.

I have run the Nokia at 8MHz with no issues, using a 3.3V mini.

Ray

No, I have two 'breadboarded' chips side by side off the same 3.3v 1A supply. One is the 'full blown' ATmega328 circuit (Uno on a breadboard) and the other is for the ATtiny84.

I'm using my own ISP programmer ( AVR Programmer ) so I don't have to disturb the ATmega328 to program the tiny84. I know the ATtiny84 chips are ok and the 'pin mapping' is ok because I can blink 6 LEDs using the same digitalWrite pins that I'm trying to use with the Nokia. Unfortunately, my old 'scope isn't up to the job of examining the waveforms in any meaningful way.

If I increase the contrast in the Nokia sketch (in void LcdInitialise(void) ) , I can see the Nokia's entire 'active' screen area going darker grey and just 1 or 2 random pixels in black, presumably as it attempts to write characters.

As I say, upload the sketch to the 328 and swap the Nokia to the 328 (so I'm using the same display) and it works fully as expected.

I deliberately used that sketch because it doesn't use any of the Nokia libraries that are available so I could see that no 'exotic' functions that are alien to the tiny84 are being used.

John.

As I say, upload the sketch to the 328 and swap the Nokia to the 328 (so I'm using the same display) and it works fully as expected.

This reply is an acknowledgement that I read your response; however, I do not have any advice other than to use a 328P-PU instead of the ATtiny84. This is one of those moment where you can continue to hit your head against the wall, or stop and go in another direction.

Perhaps my response and bumping up this thread will get the attention of one of our members that recognize the symptoms and can advise. My workbench is littered with mega328 and tiny85 projects, but while I have experience with the Nokia 5110, I have never utilized a tiny84 in a project. I decided long ago to standardize on only 2 of the DIP chips: tiny85 and mega328. I was looking at Newark and the pricing between the t84 and 328P is $0.15 in Qty 1 and only $0.10 in Qty 25. From a hobby point of view, using the 328P may be an overkill, but it certainly aligns homebrew designs with the UNO for test purposes.

Sorry I could be of no help. Where are the ATtiny84 dudes?

Ray

No problem. Thanks for trying. :slight_smile:

The smaller chip would be useful for hand-held devices but it does look like I'll have to stick wit the 328 if I want to use a display. I might try SoftwareSerial and see if I can drive a 2 x 40 LCD instead of the Nokia.

John.

For anyone following this thread, this may be useful.

I've finally got the display to work using the arduino-tiny core ( Google Code Archive - Long-term storage for Google Code Project Hosting. ) and a Nokia 5110 library from here: Electronics - Henning Karlsen

John.