Could be as simple as a bad coolant temperature sensor. Or as nasty as a failing optispark module. Codes can be a guidance, but sometimes a problem is not quite bad enough to set a code. You may need a scan tool to look at the raw data. Some things (like the temperature sensor) you can hunt down with a multi-meter and the expected values from the Factory Service Manual, but the scan tool can be a real time saver even then.