atmega8 pinout

Hey, i was trying to upload my IRremote code (which perfecly works on arduino) to atmega8, to do that i have to generate hex file and with avrdude upload it to atmega8. BUT there is a problem, on atmega8 pins are named like "PB0" and so on. in arduino there are only pins named by numbers and when i am trying to verify IR code on arduino program it says that "PB0" and other atmega8 pins was not declared in the scope. what sould i do?

Try PORTB0

Pin names are just the same but you may need to change the board type in the IDE to 'Arduino NG or older w/ ATmega8' (assuming the chip has a 16Mhz clock) else you will need a different board.txt definition.

thanks, but now i'm getting another problem :

C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp: In member function 'virtual void IRsend::mark(int)':
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp:172: error: 'TCCR2A' was not declared in this scope
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp:172: error: 'COM2B1' was not declared in this scope
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp: In member function 'virtual void IRsend::space(int)':
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp:180: error: 'TCCR2A' was not declared in this scope
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp:180: error: 'COM2B1' was not declared in this scope
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp: In member function 'void IRsend::enableIROut(int)':
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp:198: error: 'TIMSK2' was not declared in this scope
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp:207: error: 'TCCR2A' was not declared in this scope
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp:208: error: 'TCCR2B' was not declared in this scope
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp:208: error: 'WGM22' was not declared in this scope
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp:211: error: 'OCR2A' was not declared in this scope
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp:212: error: 'OCR2B' was not declared in this scope
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp: In member function 'void IRrecv::enableIRIn()':
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp:224: error: 'TCCR2A' was not declared in this scope
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp:229: error: 'TCCR2B' was not declared in this scope
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp:234: error: 'TIMSK2' was not declared in this scope

but if i choose Arduino NG or older w/atmega168 it doesn't show any problem.

I know the mega8 has less PWM's (amongst other things) than the mega328 and it looks like the IRremote library is using some features that don't exist in the mega8. I don't know if it's possible to change/configure the IRlibrary to suit. Might be as well to grab a new 328 as it's pin compatible with the 8 and swap them over.

If you can use D9, D10 and/or D11 for any analogWrite commands that you need then you should be OK on an ATMega8. These are the only 3 PWM pins on that chip I believe.

It only has one Timer/Counter Control Register, hence no "TCCR2". The 168 has two, hence it's happy with references to TCCR2.

Edit - re-reading the context, it's probably the IR library that is using TCCR2, which will be harder to change. However, you may be able to edit the library to use timer 1. Might be easier to use a '168 or '328 that have a timer 2 available - as Riva suggests.

Ugi

Dr_Ugi:
only has one Timer/Counter Control Register

i think you meant to say "only has Control Registers for two Timer/Counters". 3 pwm are available and this should compile fine for m8 under arduino following rivas advice on ng.

I meant only that TCCR2 exists on the ATMega168 but not on the ATMega8. TCCR1 exists on both.

It appears that it does not compile on the '8 (following Riva's very appropriate advice) because the compiler is looking for TCCR2 amongst others. It does compile on the '168 where these exist.

If the sketch and library refer to PWM pins that are supported on the '8 (D9-11 I believe) then I agree - it should complie fine. It appears that something does not at the moment and the compiler is looking for registers etc that don't exist on the '8.

I have changed TCCR2 to TCCR0 but still i have these errors:

C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp: In member function 'virtual void IRsend::mark(int)':
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp:172: error: 'TCCR2A' was not declared in this scope
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp:172: error: 'COM2B1' was not declared in this scope
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp: In member function 'virtual void IRsend::space(int)':
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp:180: error: 'TCCR2A' was not declared in this scope
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp:180: error: 'COM2B1' was not declared in this scope
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp: In member function 'void IRsend::enableIROut(int)':
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp:198: error: 'TIMSK2' was not declared in this scope
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp:207: error: 'TCCR2A' was not declared in this scope
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp:208: error: 'TCCR2B' was not declared in this scope
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp:208: error: 'WGM22' was not declared in this scope
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp:211: error: 'OCR2A' was not declared in this scope
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp:212: error: 'OCR2B' was not declared in this scope
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp: In member function 'void IRrecv::enableIRIn()':
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp:224: error: 'TCCR2A' was not declared in this scope
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp:229: error: 'TCCR2B' was not declared in this scope
C:\Users\PUKIS\Documents\Arduino\libraries\IRremoteeee\IRremote.cpp:234: error: 'TIMSK2' was not declared in this scope

should i change each of these from 2 to 0?

Timer2 is significantly different on an ATmega8 than it is on an ATmega168. You probably have to move "everything" to a different timer.

Which IRRemote library are you trying to use? I looked at GitHub - Arduino-IRremote/Arduino-IRremote: Infrared remote library for Arduino: send and receive infrared signals with multiple protocols and it already has code to automatically use timer1 on an ATmega8...

Timer2 is significantly different on an ATmega8 than it is on an ATmega168. You probably have to move "everything" to a different timer.

Which IRRemote library are you trying to use? I looked at GitHub - Arduino-IRremote/Arduino-IRremote: Infrared remote library for Arduino: send and receive infrared signals with multiple protocols and it already has code to automatically use timer1 on an ATmega8...

Thank you so so so much!!!!

ok one problem down :slight_smile: but now when i am trying to upload program to atmega8 i am getting this error :

avrdude: verification error, first mismatch at byte 0x0000
0x3f != 0x00
avrdude: verification error; content mismatch

Do you have the right bootloader in your mega8? Or are you using a device programmer?

i am uploading program with arduino. I don't know if i should burn bootloader into my atmega8, well if i should than i don't really know how :confused:

minoswydis:
i am uploading program with arduino. I don't know if i should burn bootloader into my atmega8, well if i should than i don't really know how :confused:

You don't need to burn a bootloader as you could always use your UNO (or a device programmer) to program it but it gets tedious using an UNO to keep connecting/disconnecting to program. Look here to see how http://arduino.cc/en/Tutorial/ArduinoISP
I found it easiest to burn a bootloader and then have an FDTI2USB like https://www.sparkfun.com/products/9716? to upload programs and act as a serial monitor.

I am doing it like here http://arduino.cc/en/uploads/Tutorial/SimpleBreadboardAVR.png but error is the same every time i try to upload program. maybe i could change something in library to fix this?

If you look on the ArduinoISP link I supplied it shows how to wire a breadboard chip to your UNO, Upload the ArduinoISP sketch, Install a capacitor between reset and ground on the UNO to prevent it resetting and then selecting correct target device in the IDE to program via the ArduinoISP sketch. I have done this with ATmega328, ATmega8 & ATtiny85 without problem. The most difficult job was finding a suitable bootloader for the ATmega8 chip to run 8Mhz internal clock but that was about a year ago now so probably no longer a problem.